实战人品预测之二 _ 热门模型 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
2
3
4
5
6
import xgboost as xgb

model = xgb.XGBClassifier()
model.fit(train_x, train_y)
model.score(test_x, test_y)
test_y = model.predict(test_x)

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。