继上一篇XGBoost的公式推导之后,这一篇说一下XGBoost的代码上的实战
代码实战
首先,我们拿到一个糖尿病人的各项指标数据,我们希望用XGBoost来根据这些数据来区分那些是病人那些不是
最后一行是否是病人的标签,前面7列是各项指标
先将数据划分,然后将他们分为训练集和测试集
训练与测试,并输出准确率
输出结果如下,准确率为77.95%
基于这个基础上,我们尝试着不断给他加入(树)分类器,直到某个值饱和,再输出最优的效果,监控其训练过程
与上面大部分代码一致,只是再训练fit函数的时候增加了一些参数
eval_metric是衡量标准的一个值
early_stopping_rounds每增加一个模型,当logloss还没下降,就训练多10次,如果还没下降就表示该值已经达到饱和状态并且输出最优结果
的确,在32之后就已经达到了饱和
代码在GitHub:myXgboost1
可以显示各参数的重要程度
代码在GitHub:myXgboost2
接下来,我们尝试对XGBoost的参数进行调优
xgboost参数如下:
'booster':'gbtree',
'objective': 'multi:softmax', 多分类的问题
'num_class':10, 类别数,与 multisoftmax 并用
'gamma':损失下降多少才进行分裂
'max_depth':12, 构建树的深度,越大越容易过拟合
'lambda':2, 控制模型复杂度的权重值的L2正则化项参数,参数越大,模型越不容易过拟合。
'subsample':0.7, 随机采样训练样本
'colsample_bytree':0.7, 生成树时进行的列采样
'min_child_weight':3, 孩子节点中最小的样本权重和。如果一个叶子节点的样本权重和小于min_child_weight则拆分过程结束
'silent':0 ,设置成1则没有运行信息输出,最好是设置为0.
'eta': 0.007, 如同学习率
'seed':1000,
'nthread':7, cpu 线程数
‘learning_rate ’,0.1 学习率
我们通过遍历学习率,来看下什么样的学习率才是最优的
输出结果如下,最优的学习率为0.1
代码在GitHub:myXgboost3