文章目录
XGBoost参数调整
1 背景
- 这阵子在学习数据挖掘与机器学习,不过侧重的是机器学习,刚好课堂上的作业是做二分类,以及实训的主要内容也是二分类,暂时对于数据清理部分还没有去深入了解,所以觉得用对的算法以及把算法用好目前来说对于自己的作业而言是非常重要的。
- TA推荐的算法主要的是有XGboost、LightGBM、CatBoost、RandomForest等等,所以XGboost作为第一个还是很有必要让自己去了解以下的,于是自己就来偷偷研究了
2 题目
常规的二分类问题:
- 训练集:20万数据的具有32个特征的(仅仅是一个特征)的带有label的数据
- 测试集:18万数据
3 解法
- 使用Pandas读入测试集csv文件
- 调用xgboost库使用XGBClassifier(安装包可以在Unofficial Windows Binaries for Python Extension Packages下载)
- 交叉验证(一般使用StratifiedShuffleSplit进行划分即可)并给出正确数值,可以当作是test集的准确度
- 将训练好的分类器对测试集进行分类
4 XGboost参数的作用(此处参考大佬的博文,如有雷同请见谅)
4.1 常规参数
- booster(默认为gbtree):
- gbtree 树模型做基本的分类器
- gbliner 线性模型作为基分类器(比较少用,因为树模型效果远远好于线性模型)
- silent(默认为0):
- 0 时, 不输出中间过程
- 1 时, 输出中间过程
- nthread(默认为-1):
- -1时,使用全部CPU进行并行运算
- num,使用对应的CPU进行运算
- scale_pos_weight :
- 正样本的权重,在二分类的任务中,当正负样本比例失衡时,设置正样本的权重,模型效果更好
4.2 模型参数
- n_estimatores:决策树的数量
- early_stopping_rounds:在验证集上,当连续n次迭代,分数没有提高后,提前终止训练。(防止overfitting)
- max_depth:树的深度,默认值为6
- 典型值3-10。(值越大,越容易过拟合;值越小,越容易欠拟合)
- max_delta_step(默认为0):
- 限制每棵树权重改变的最大步长,如果值为0,则是没有约束。
- min_child_weight:默认值为1,。
- 值越大,越容易欠拟合;值越小,越容易过拟合(值较大时,避免模型学习到局部的特殊样本)。
- subsample(默认值为1):
- 训练每棵树时,使用的数据占全部训练集的比例。典型值为0.5-1。(防止overfitting)
- colsample_bytree:
- 训练每棵树时,使用的特征占全部特征的比例。默认值为1,典型值为0.5-1。
- scale_pos_weight(默认为1)
- 在各类别样本十分不平衡时,把这个参数设定为一个正值,可以使算法更快收敛。
4.3 学习任务参数
- learning_rate 学习率(默认为0.3):
- 调参:值越小,训练越慢。
- 典型值为0.01-0.2。
- objective 目标函数:
- reg回归任务(默认默认为linear):
- linear
- logistic
- binary 二分类:
- logistic 概率
- logitraw 类别
- multi 多分类:
- softmax num_class=n(类别数目) 返回类别
- softprob num_class=n(类别数目) 返回概率
- rank:pairwise
- eval_metric
- 回归任务(默认为rmse)
- rmse–均方根误差
- mae–平均绝对误差
- 分类任务(默认为error)
- auc–roc曲线下面积
- error–错误率(二分类)
- merror–错误率(多分类)
- logloss–负对数似然函数(二分类)
- mlogloss–负对数似然函数(多分类)
- gamma
-惩罚项系数,指定节点分裂所需的最小损失函数下降值,这个参数值越大,则算法越保守。 - alpha(默认为1):L1正则化系数
- lambda(默认为1):L2正则化系数
5 参数调整的方法:
- 选择一个相对来说稍微高一点的learning rate。一般默认的值是0.1,不过针对不同的问题,0.05到0.3之间都可以,XGBoost有一个很有用的函数“cv”,这个函数可以在每一次迭代中使用交叉验证,并返回理想的决策树数量。
- 确定其他参数的初始值:
- max_depth 取值在3-10之间
- min_child_weight 看样本而定(分类越不平衡则值越小)
- gamma 取值在0-0.2之间
- subsample 在0.5 - 0.9之间
- colsample_bytree 在0.5 - 0.9之间
- 优化参数:使用网格搜索找到最佳的值
- xgboost的正则化参数的调优。(lambda, alpha)。这些参数可以降低模型的复杂度,从而提高模型的表现。
- 降低学习速率,确定理想参数。
6 结果
在课程的练习中经过筛选之后排到了很靠前的位置,不过觉得有一些数据并没有很大的用处,应该是可以去除的。等着再清洗一下数据改改看了