0
点赞
收藏
分享

微信扫一扫

实战人品预测之二_热门模型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是一个独立的软件包,需要单独安装

$ pip install xgboost

(2) 示例代码

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参数分为三类:boost参数,tree参数,其它参数。

(1) Tree参数

 虽然xgboost也提供了linear作为弱分类器,但是大家一般都使用树分类器,这部分设置主要是控制树的大小,避免过拟合,具体参数是由实例的多少及分布密度决定的。

  • max_depth:最大树深(默认6,同sklearn中max_depth)
  • max_leaf_nodes:树上最大的节点或叶子的数量(同sklearn中max_ leaf_ nodes)

(2) Boost参数

  • scale_pos_weight:正反例数据权重,使用它就不再需要增加反例了。
  • early_stopping_rounds:多少轮内无提高则停止。
  • eta:学习率(默认0.3,同sklearn中learning_ rate)。
  • min_child_weight:最小叶子节点样本权重和(默认1,类似sklearn中min_child_leaf)。
  • max_delta_step:每棵树权重改变的最大步长(默认0,为没约束,一般不设)。
  • subsample:每棵树所用到的子样本占总样本的比例(默认1,一般用0.8,同sklearn中subsample)。
  • colsample_bytree:树对特征采样的比例(默认1,类似sklearn中max_features)。
  • colsample_bylevel:每一级的每一次分裂,对列数的采样的占比。
  • lambda:权重的L2正则化项,避免过拟合,降低复杂度(默认1,不常用)
  • alpha:权重的L1正则化项,避免过拟合,降低复杂度(默认1)
  • gamma:节点分裂所需的最小损失函数下降值(默认0)

(3) 其它参数

  • booster:选择分类器类型树或线性(默认为gbtree,一般不改)
  • silent:是否打印输出信息(默认为0,输出信息,一般不改)
  • nthread:最大线程数(默认为CPU全部核,一般不改)
  • seed:随机种子,使用后随机结果变得可复现(类似sklearn中random_ state)
  • objective:损失函数
  • eval(232, 232, 232); background: rgb(249, 249, 249);">

    from sklearn import svm, datasets
    from sklearn.model_selection import GridSearchCV
    import xgboost as xgb

    iris = datasets.load_iris()

    parameters = {'max_depth':[4,5,6], 'min_child_weight':[4,5,6]}
    model = xgb.XGBClassifier()
    clf = GridSearchCV(model, parameters)
    clf.fit(iris.data, iris.target)

    print(clf.grid_scores_)
    print(clf.best_params_)
    print(clf.best_score_)


    7. 总结

     通过本次实验,明显看到xgboost好处,比如支持多线程,可调节正反例权重,自带交叉验证,处理缺省值,包含了很多预处理的工作。
     使用冠军代码做预测,没加任何的特征处理和其它算法的情况下,迭代共进行了50000次,线上得分超过0.7,这个得分和比赛结束时的最高分0.734已经差不太多了。每次打印出AUC值,能明显看出它的进化过程:不断迭代,直到收敛。从原理上看,该算法在基础参数没问题,在机器算力也足够的情况下,应该可以取得接近最佳的成绩。
     扩展地看,增加错误权重,不断迭代的集成算法,与多算法结合效果都不错,具体可以参考sklearn自带工具AdaBoost。


    技术文章定时推送
    请关注公众号:算法学习分享
    ​​​

    实战人品预测之二_热门模型xgboost_数据挖掘

    ​​

举报

相关推荐

0 条评论