这篇介绍Boosting的第二个模型GBDT,GBDT和Adaboost都是Boosting模型的一种,但是略有不同,主要有以下两点不同:
GBDT使用的基模型是CART决策树,且只能是CART决策树,而Adaboost的默认基模型是CART决策树,可以是其他模型。
GBDT通过计算每次模型的负梯度来进行模型迭代,而Adaboost模型则根据错分率来进行模型迭代。
class sklearn.ensemble.GradientBoostingClassifier(loss=‘deviance’, learning_rate=0.1, n_estimators=100, subsample=1.0, criterion=‘friedman_mse’, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_depth=3, min_impurity_decrease=0.0, min_impurity_split=None, init=None, random_state=None, max_features=None, verbose=0, max_leaf_nodes=None, warm_start=False, presort=‘auto’)
因基分类器是决策树,所以很多参数都是用来控制决策树生成的,这些参数与前面决策树参数基本一致,对于一致的就不进行赘述。关于决策树参数看这里:Sklearn参数详解–决策树
loss:损失函数度量,有对数似然损失deviance和指数损失函数exponential两种,默认是deviance,即对数似然损失,如果使用指数损失函数,则相当于Adaboost模型。
criterion: 样本集的切分策略,决策树中也有这个参数,但是两个参数值不一样,这里的参数值主要有friedman_mse、mse和mae3个,分别对应friedman最小平方误差、最小平方误差和平均绝对值误差,friedman最小平方误差是最小平方误差的近似。
subsample:采样比例,这里的采样和bagging的采样不是一个概念,这里的采样是指选取多少比例的数据集利用决策树基模型去boosting,默认是1.0,即在全量数据集上利用决策树去boosting。
warm_start:“暖启动”,默认值是False,即关闭状态,如果打开则表示,使用先前调试好的模型,在该模型的基础上继续boosting,如果关闭,则表示在样本集上从新训练一个新的基模型,且在该模型的基础上进行boosting。
属性/对象
feature_importance_:特征重要性。
oob_improvement_:每一次迭代对应的loss提升量。oob_improvement_[0]表示第一次提升对应的loss提升量。
train_score_:表示在样本集上每次迭代以后的对应的损失函数值。
loss_:损失函数。
estimators_:基分类器个数。
apply(X):将训练好的模型应用在数据集X上,并返回数据集X对应的叶指数。
decision_function(X):返回决策函数值(比如svm中的决策距离)
fit(X,Y):在数据集(X,Y)上训练模型。
get_parms():获取模型参数
predict(X):预测数据集X的结果。
predict_log_proba(X):预测数据集X的对数概率。
predict_proba(X):预测数据集X的概率值。
score(X,Y):输出数据集(X,Y)在模型上的准确率。
staged_decision_function(X):返回每个基分类器的决策函数值
staged_predict(X):返回每个基分类器的预测数据集X的结果。
staged_predict_proba(X):返回每个基分类器的预测数据集X的概率结果。
这与决策树算法自身的优点有很大的关系。决策树可以认为是if-then规则的集合,易于理解,可解释性强,预测速度快。同时,决策树算法相比于其他的算法需要更少的特征工程,比如可以不用做特征标准化,可以很好的处理字段缺失的数据,也可以不用关心特征间是否相互依赖等。决策树能够自动组合多个特征,它可以毫无压力地处理特征间的交互关系并且是非参数化的,因此你不必担心异常值或者数据是否线性可分(举个例子,决策树能轻松处理好类别A在某个特征维度x的末端,类别B在中间,然后类别A又出现在特征维度x前端的情况)。不过,单独使用决策树算法时,有容易过拟合缺点。所幸的是,通过各种方法,抑制决策树的复杂性,降低单颗决策树的拟合能力,再通过梯度提升的方法集成多个决策树,最终能够很好的解决过拟合的问题。由此可见,梯度提升方法和决策树学习算法可以互相取长补短,是一对完美的搭档。至于抑制单颗决策树的复杂度的方法有很多,比如限制树的最大深度、限制叶子节点的最少样本数量、限制节点分裂时的最少样本数量、吸收bagging的思想对训练样本采样(subsample),在学习单颗决策树时只使用一部分训练样本、借鉴随机森林的思路在学习单颗决策树时只采样一部分特征、在目标函数中添加正则项惩罚复杂的树结构等。现在主流的GBDT算法实现中这些方法基本上都有实现,因此GBDT算法的超参数还是比较多的,应用过程中需要精心调参,并用交叉验证的方法选择最佳参数。
GBDT(Gradient Boosting Decision Tree)算法,翻译成梯度提升决策树算法。GBDT重点首先是Gradient Boosting,其次才是Decision Tree决策树。
GBDT是GBM框架下使用较多的一种模型,在GBDT中,其基学习器是CART分类回归树,使用的是CART树中的回归树。GBDT中的树都是回归树,不是分类树。尽管GBDT调整后也可用于分类,但不代表GBDT的树是分类树。
理论上,GBM可以选择各种不同的学习算法作为基学习器。现实中,用得最多的基学习器是决策树。为什么梯度提升方法倾向于选择决策树(通常是CART树)作为基学习器呢?这与决策树算法自身的优点有很大的关系。我们知道,单独使用决策树算法时,容易出现过拟合问题。假如通过方法来抑制决策树的复杂性,降低单颗决策树的拟合能力,再通过梯度提升方法集成多个决策树,最终能很好地解决过拟合问题。由此可见,梯度提升方法和决策树算法可以取长补短,是一对完美搭档。
GBDT在迭代的每一步构建一个能够沿着梯度最陡的方向降低损失的学习器来弥补已有模型的不足。GBDT在函数空间中利用梯度下降法进行优化。
在GBDT的迭代中,假设前一轮迭代得到的强学习器是ft-1(x)损失函数是L(y,ft-1(x)) 。本轮迭代的目标是找到一个CART回归树模型的弱学习器ht(x),让本轮的损失L(t,ft-1(x)+ht(x))最小。也就是说,本轮迭代找到决策树,要让样本的损失尽量变得更小。
对于回归算法,常用损失函数有如下4种:
GBDT算法参数:
GBDT算法的超参数还是比较多的,应用过程中需要精心调参,并用交叉验证的方法选择最佳参数。
1)灵活处理各种类型的数据,包括连续值和离散值;
2)在相对少的调参时间情况下,预测的准确率也可以比较高;
3)抵御训练数据中的噪音,具有更好的健壮性;
4)使用一些健壮的损失函数,对异常值的鲁棒性非常强;
5)性能最好的机器学习算法之一;
6)适用面非常广。