实战人品预测之二_热门模型xgboost
实战人品预测之二 _ 热门模型 xgboost
1. 介绍
有人戏称数据挖掘比赛为 GBDT 调参大赛,因为在很多比赛后期,大家都使用 GBDT 类的算法,特征类似,只有模型参数不同,模型集成方法不同,最终大家的成绩差别也很小。
上篇《实战人品预测之一 _ 国内大数据竞赛平台》,介绍 DataCastle 平台的“微额借款用户人品预测大赛”比赛规则,以及一些初步的尝试。本篇说说最终获胜的,也是 GDBT 类算法中使用频率最高的 xgboost 算法的使用和调参方法。
2. xgboost 原理
之前在《机器学习 _ 集成算法》篇(http://www.jianshu.com/p/3c8cca3e1ca2)中介绍过 GBDT 类的算法,简单回顾一下:
Boosting 算法不断地使用同一算法(比如决策树)建立新模型,而新模型分配给上一次错分样本更大的权重,最终根据按成功度加权组合得到结果。由于引入了逐步改进的思想,重要属性会被加权。
Gradient Boosting Machine(GBM)梯度提升算法是目前比较流行的数据挖掘模型,它通过求损失函数在梯度方向下降的方法,层层改进,是泛化能力较强的算法,常用于各种数据挖掘比赛之中。常用的工具有 XGBoost,LightGBM,sklearn 提供的 GradientBoostingClassifier 等等。GBM 常把决策树作为基模型,我们看到的 GBDT 梯度提升决策树,指的就是该算法。
3. xgboost 简单使用
(1) 安装库
xgboost 是一个独立的软件包,需要单独安装
1 | $ pip install xgboost |
(2) 示例代码
1 | import xgboost as xgb |
4. xgboost 与 sklearn
xgboost 提供了两种接口,一种是它自身的调用接口,另一种与 sklearn 的调用方式一样,上面的代码使用的是 sklearn 调用方式,它让用户能很快从 sklearn 的 GBDT 转到 xgboost 上。(不只 xgboost,很多数据挖掘库都提供类似 sklearn 的调用方法)
另外一个好处是,它能与 sklearn 的工具 GridSearchCV 结合,实现自动调参,后面细说。
5. xgboost 参数
[[XGBoost_参数#参数]]
6. 调参
当我第一次用 xgboost 替代了 sklearn 的 gdbt 时,同样是默认参数,在不调参的情况下,成绩下降了 0.05,主要是由于 xgboost 默认参数导致的,后来使用了冠军的参数,大概有 0.02 的提升。这说明调参是必须的。
[[XGBoost_参数#调参]]
7. 总结
通过本次实验,明显看到 xgboost 好处,比如支持多线程,可调节正反例权重,自带交叉验证,处理缺省值,包含了很多预处理的工作。
使用冠军代码做预测,没加任何的特征处理和其它算法的情况下,迭代共进行了 50000 次,线上得分超过 0.7,这个得分和比赛结束时的最高分 0.734 已经差不太多了。每次打印出 AUC 值,能明显看出它的进化过程:不断迭代,直到收敛。从原理上看,该算法在基础参数没问题,在机器算力也足够的情况下,应该可以取得接近最佳的成绩。
扩展地看,增加错误权重,不断迭代的集成算法,与多算法结合效果都不错,具体可以参考 sklearn 自带工具 AdaBoost。