原谅我字太丑……
好了,终于结束我的丑字荼毒了,现在可以开始着手代码。在放代码之前,我们要先了解xgboost库,他并不是sklearn库下的,而是陈天奇小天才发明的。在使用xgboost的方法和实例化会和sklearn不一样,但他还有一个sklearn的api接口,用这个接口的方法和参数和sklearn模型很像,是我们熟悉的.fit和.score。
使用api接口虽然很方便,可以结合sklearn其他库使用,比如网格搜索,交叉验证等方法调参,但同样有个致命的缺点就是效率极极极低,用api要花10分钟的话,用xgboost原生包只要2秒。同理,xgboost也有缺点就是可调参参数很多,没有网格搜索辅助,只能手动调参,不过幸亏原生包还有个交叉验证的接口,交叉验证也是比sklearn快一丢丢的。另外原生包还有一点个人觉得小小缺点的就是,不能直接.score,需要predict之后,在结合sklearn.metrics计算分数。
oh,这个库不是python自带的,所以还需要自己下载,windows同学下载应该只需要在cmd上输入:pip install xgboost。mac同学……就很复杂了,需要自行百度……
先放xgboost参数的解释,参数名字api和原生包会有所不同,
booster
gbtree 树模型做为基评估器(默认)
gblinear 线性模型做为基评估器
silent
silent=0时,输出中间过程(默认)
silent=1时,不输出中间过程
nthread
nthread=-1时,使用全部CPU进行并行运算(默认)
nthread=1时,使用1个CPU进行运算。
scale_pos_weight
正样本的权重,在二分类任务中,当正负样本比例失衡时,设置正样本的权重,模型效果更好。例如,当正负样本比例为1:10时,scale_pos_weight=10。
#模型参数
n_estimatores
含义:总共迭代的次数,即决策树的个数
调参:
early_stopping_rounds
含义:在验证集上,当连续n次迭代,分数没有提高后,提前终止训练。
调参:防止overfitting。
max_depth
含义:树的深度,默认值为6,典型值3-10。
调参:值越大,越容易过拟合;值越小,越容易欠拟合。
min_child_weight
含义:默认值为1,叶子节点权重分数的下界,1到正无穷。
调参:值越大,越容易欠拟合;值越小,越容易过拟合(值较大时,避免模型学习到局部的特殊样本)。
subsample
含义:训练每棵树时,使用的数据占全部训练集的比例。默认值为1,典型值为0.5-1。
调参:防止overfitting。
colsample_bytree
含义:训练每棵树时,使用的特征占全部特征的比例。默认值为1,典型值为0.5-1。
调参:防止overfitting。
# 学习任务参数
learning_rate/原生包叫eta
含义:学习率,控制每次迭代更新权重时的步长,默认0.3。
调参:值越小,训练越慢。
典型值为0.01-0.2。
objective 目标函数
回归任务
reg:linear (默认) 使用线性回归的损失函数,均方误差
二分类
binary:logistic 使用逻辑回归的损失函数,类概率,sigmoid函数
binary:logitraw 返回的是sigmoid函数的z值
binary:hinge 使用支持向量机的损失函数,hinge loss,二分类使用
多分类
multi:softmax num_class=n 使用softmax损失函数,结合num_class参数一起调整,返回类别
multi:softprob num_class=n 返回概率
rank:pairwise
eval_metric 模型评分
回归任务(默认rmse)
rmse--均方根误差
mae--平均绝对误差
分类任务(默认error)
auc--roc曲线下面积
error--错误率(二分类)
merror--错误率(多分类)
logloss--负对数似然函数(二分类)
mlogloss--负对数似然函数(多分类)
gamma
惩罚项系数,指定节点分裂所需的最小损失函数下降值。
调参:后剪枝的过程,0到正无穷, 默认0,尝试0, 1,5,10,100
alpha
L1正则化系数,默认为1
lambda
L2正则化系数,默认为1