boosting算法_Boosting算法总结
⼀、Boosting算法
大龙虾三种家常做法boosting算法有许多种具体算法,包括但不限于ada boosting GBDT XGBoost .
所谓 Boosting
Boosting ,就是将弱分离器 f_i(x) 组合起来形成强分类器 F(x) 的⼀种⽅法。
1. Ada boosting
增强(boost)整体的效果,通过不断的模型迭代,更新样本点的权重
权重
每个⼦模型模型都在尝试增强(boost)
train_test_split
oob(out of bag ) 的样本,因此需要进⾏ train_test_split
Ada Boosting没有oob
原始数据集 》 某种算法拟合,会 产⽣错误 》 根据上个模型预测结果,更新样本点权重(预测错误的结果权重增⼤) 》 再次使⽤模型进⾏预测 》重复上述过程,继续重点训练错误的预测样本点
每⼀次⽣成的⼦模型,都是在⽣成拟合结果更好的模型,
(⽤的数据点都是相同的,但是样本点具有不同的权重值)
Ba Estimator
需要指定 Ba Estimator
ble import AdaBoostClassifier
import DecisionTreeClassifier
ada_clf = AdaBoostClassifier(DecisionTreeClassifier(max_depth=2), n_estimators=500) ada_clf.fit(X_train, y_train)
ada_clf.score(X_test, y_test)
2. Gradient Boosting(GBDT)
DBDT (gradient boosting decision tree )Gradient Boosting ⼜称为 DBDT
训练⼀个模型m1, 产⽣错误e1
针对e1训练第⼆个模型m2, 产⽣错误e2
针对e2训练第⼆个模型m3, 产⽣错误e3
......
桥梁设计师
最终的预测模型是:$m1+m2+m3+...$
基于决策树的,不⽤指定Ba Estimator
Gradient Boosting是基于决策树
ble import GradientBoostingClassifier
gb_clf = GradientBoostingClassifier(max_depth=2, n_estimators=30)
gb_clf.fit(X_train, y_train)
gb_clf.score(X_test, y_test)
3.XGBoost
Ba Estimator是基于decision tree的
这个算法的Ba Estimator宋江河
Xgboost是在GBDT
GBDT的基础上进⾏改进,使之更强⼤,适⽤于更⼤范围
xgboost可以⽤来确定特征的重要程度
博客园上【战争热诚】写的⼀篇介绍xgboost算法的⽂章,
强烈推荐博客园
Python机器学习笔记:XgBoost算法
⾮常详细地介绍了xgboost的优点、安装、xgboost参数的含义、使⽤xgboost实例代码、保存训练好的模型、并介绍了xgboost参数调优的⼀半流程。
然⽽,,,我发现该作者好像也是转载的,怪不得有些地⽅看不懂,还缺少代码。不过是中⽂的有助于理解。
⽂章原⽂链接如下:
依帕司他Complete Guide to Parameter Tuning in XGBoost with codes in Python
⽂中提到的数据的github仓库地址:
Parameter_Tuning_GBM_with_Example
另外⼀篇,掘⾦上不错的⽂章:
xgboost参数解释、调参
3.1 xgboost模型参数
模型参数总体上分为3类:
1. 通⽤参数
学生会总结booster[default=gbtree]
有两种模型可以选择gbtree和gblinear。gbtree使⽤基于树的模型进⾏提升计算,gblinear使⽤线性模型进⾏提升计算。缺省值为gbtree
silent [default=0]
取0时表⽰打印出运⾏时信息,取1时表⽰以缄默⽅式运⾏,不打印运⾏时的信息。缺省值为0
nthread
XGBoost运⾏时的线程数。缺省值是当前系统可以获得的最⼤线程数
num_pbuffer
预测缓冲区的⼤⼩,通常设置为训练实例数。缓冲区⽤于保存最后提升步骤的预测结果
num_feature
boosting过程中⽤到的特征维数,设置为特征个数。XGBoost会⾃动设置,不需要⼿⼯设置
2. booster参数
booster参数根据选择的booster不同,⼜分为两个类别,分别介绍如下:
2.1 tree booster参数
eta [default=0.3]
社会保险缴费基数为了防⽌过拟合,更新过程中⽤到的收缩步长。在每次提升计算之后,算法会直接获得新特征的权重。 eta通过缩减特征的权重使提升计算过程更加保守。缺省值为0.3
取值范围为:[0,1]
通常最后设置eta为0.01~0.2
gamma [default=0]
minimum loss reduction required to make a further partition on a leaf node of the tree. the larger, the more
conrvative the algorithm will be.
range: [0,∞]
模型在默认情况下,对于⼀个节点的划分只有在其loss function 得到结果⼤于0的情况下才进⾏,⽽gamma 给定了所需的最低loss function的值
gamma值使得算法更conrvation,且其值依赖于loss function ,在模型中应该进⾏调参。
max_depth [default=6]
树的最⼤深度。缺省值为6
取值范围为:[1,∞]
指树的最⼤深度
树的深度越⼤,则对数据的拟合程度越⾼(过拟合程度也越⾼)。即该参数也是控制过拟合
建议通过交叉验证(xgb.cv ) 进⾏调参
通常取值:3-10
min_child_weight [default=1]
孩⼦节点中最⼩的样本权重和。如果⼀个叶⼦节点的样本权重和⼩于min_child_weight则拆分过程结束。在现⾏回归模型中,这个参数是指建⽴每个模型所需要的最⼩样本数。该常数越⼤算法越conrvative。即调⼤这个参数能够控制过拟合。
取值范围为: [0,∞]
max_delta_step [default=0]
取值范围为:[0,∞]
如果取值为0,那么意味着⽆限制。如果取为正数,则其使得xgboost更新过程更加保守。
通常不需要设置这个值,但在使⽤logistics 回归时,若类别极度不平衡,则调整该参数可能有效果
subsample [default=1]
⽤于训练模型的⼦样本占整个样本集合的⽐例。如果设置为0.5则意味着XGBoost将随机的从整个样本集合中抽取出50%的⼦样本建⽴树模型,这能够防⽌过拟合。
取值范围为:(0,1]
colsample_bytree [default=1]
在建⽴树时对特征
特征随机采样的⽐例(因为每⼀列是⼀个特征)。缺省值为1
取值范围:(0,1]
colsample_bylevel[default=1]
决定每次节点划分时⼦样例的⽐例
通常不使⽤,因为subsample和colsample_bytree已经可以起到相同的作⽤了
scale_pos_weight[default=0]
学生自我评价15字⼤于0的取值可以处理类别不平衡的情况。帮助模型更快收敛
Linear Booster参数
lambda [default=0]
L2 正则的惩罚系数
⽤于处理XGBoost的正则化部分。通常不使⽤,但可以⽤来降低过拟合
alpha [default=0]
L1 正则的惩罚系数
当数据维度极⾼时可以使⽤,使得算法运⾏更快。
lambda_bias
在偏置上的L2正则。缺省值为0(在L1上没有偏置项的正则,因为L1时偏置不重要)
3. 学习⽬标参数
这个参数是来控制理想的优化⽬标和每⼀步结果的度量⽅法。
objective [ default=reg:linear ]
定义学习任务及相应的学习⽬标,可选的⽬标函数如下:
“reg:linear” –线性回归。
“reg:logistic” –逻辑回归。
“binary:logistic” –⼆分类的逻辑回归问题,输出为概率。
“multi:softmax” –让XGBoost采⽤softmax⽬标函数处理多分类问题,同时需要设置参数num_class
num_class(类别个数)“multi:softprob” –和softmax⼀样,但是输出的是ndata * nclass的向量,可以将该向量reshape成ndata⾏nclass列的矩阵。每⾏数据表⽰样本所属于每个类别的概率。
ba_score [ default=0.5 ]
the initial prediction score of all instances, global bias
eval_metric [ default according to objective ]
校验数据所需要的评价指标,不同的⽬标函数将会有缺省的评价指标吃葡萄绕口令
⽤户可以添加多种评价指标,对于Python⽤户要以list传递参数对给程序
The choices are listed below:
“rm”: root mean square error回归问题默认的参数
“logloss”: negative log-likelihood
“error”: Binary classification error rate. It is calculated as #(wrong cas)/#(all cas). For the predictions, the evaluation will regard the instances with prediction value larger than 0.5 as positive instances, and the others as negative instances.分类问题默认参数
“merror”: Multiclass classification error rate. It is calculated as #(wrong cas)/#(all cas).
“mlogloss”: Multiclass logloss
“auc”: Area under the curve for ranking evaluation.
“ndcg”:Normalized Discounted Cumulative Gain
“map”:Mean average precision
ed [ default=0 ]
随机数的种⼦。缺省值为0
可以⽤于产⽣可重复的结果(每次取⼀样的ed即可得到相同的随机划分)
3.2 xgboost实战
xgboost有两⼤类接⼝,原⽣接⼝和scikit learn接⼝,这⾥只介绍基于sklearn的接⼝的使⽤
由于是使⽤的scikitlearn的接⼝,某些参数的名称会有所区别
并且xgboost可以实现分类和回归任务
1. 分类