加法模型公式:html
其中,为基函数,
为基函数参数,
为基函数系数, 表示该项函数在加法模型中的重要性node
在给定训练数据和损失函数L(y,f(x))的条件下,学习加法模型成为经验风险极小化 (即损失函数极小化问题) 算法
大牛 Freidman 提出了用损失函数的负梯度来拟合本轮损失的近似值,进而拟合一个 CART 回归树。第 t 轮的第 i 个样本的损失函数的负梯度表示为: dom
从而本轮最终获得的强学习器的表达式以下:机器学习
经过损失函数的负梯度来拟合,咱们找到了一种通用的拟合损失偏差的办法,这样无轮是分类问题仍是回归问题,咱们经过其损失函数的负梯度的拟合,就能够用 GBDT 来解决咱们的分类回归问题。区别仅仅在于损失函数不一样致使的负梯度不一样而已。函数
不一样问题对应的损失函数不一样,这篇博客作了一个很好的总结。后续对应不一样的问题会有不一样的损失函数。 梯度提高树 (GBDT) 原理小结学习
对于二元 GBDT,若是用相似于逻辑回归的对数似然损失函数,则损失函数为:优化
其中 。则此时的负梯度偏差为 spa
除了负梯度计算和叶子节点的最佳负梯度拟合的线性搜索,二元 GBDT 分类和 GBDT 回归算法过程相同。.net
多元 GBDT 要比二元 GBDT 复杂一些,对应的是多元逻辑回归和二元逻辑回归的复杂度差异。假设类别数为 K,则此时咱们的对数似然损失函数为:
其中若是样本输出类别为 k,则 。第 k 类的几率
的表达式为:
集合上两式,咱们能够计算出第 轮的第
个样本对应类别
的负梯度偏差为
除了负梯度计算和叶子节点的最佳负梯度拟合的线性搜索,多元 GBDT 分类和二元 GBDT 分类以及 GBDT 回归算法过程相同。
和 Adaboost 同样,咱们也须要对 GBDT 进行正则化,防止过拟合。GBDT 的正则化主要有三种方式。
• 第一种是和 Adaboost 相似的正则化项,即步长 (learning rate)。定义为 , 对于前面的弱学习器的迭代
若是咱们加上了正则化项,则有
的取值范围为
。对于一样的训练集学习效果,较小的
意味着咱们须要更多的弱学习器的迭代次数。一般咱们用步长和迭代最大次数一块儿来决定算法的拟合效果。
• 第二种正则化的方式是经过子采样比例(subsample)。取值为 (0,1]。注意这里的子采样和随机森林不同,随机森林使用的是放回抽样,而这里是不放回抽样。若是取值为 1,则所有样本都使用,等于没有使用子采样。若是取值小于 1,则只有一部分样本会去作 GBDT 的决策树拟合。选择小于 1 的比例能够减小方差,即防止过拟合,可是会增长样本拟合的误差,所以取值不能过低。推荐在0.5, 0.8 之间。 使用了子采样的 GBDT 有时也称做随机梯度提高树(Stochastic Gradient Boosting Tree, SGBT)。因为使用了子采样,程序能够经过采样分发到不一样的任务去作 boosting 的迭代过程,最后造成新树,从而减小弱学习器难以并行学习的弱点。
• 第三种是对于弱学习器即 CART 回归树进行正则化剪枝。
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', validation_fraction=0.1, n_iter_no_change=None, tol=0.0001)[source]¶
复制代码
几个主要参数:
loss
: {‘deviance’, ‘exponential’}, optional (default=’deviance’) loss function to be optimized. ‘deviance’ refers to deviance (= logistic regression) for classification with probabilistic outputs. For loss ‘exponential’ gradient boosting recovers the AdaBoost algorithm. 损失函数learning_rate
: 学习率n_estimators
: int (default=100)弱学习器的个数因为缺少这方面的经验,故此部分不做赘述。 查到了一篇文章: GBDT 入门教程之原理、所解决的问题、应用场景讲解