集成学习中笔记04 前向分步算法与梯度提升决策树
开源学习地址:datawhale
1.前向分步算法
前向分步算法是集成学习中一个非常重要的框架,它的出现解决了Adaboost加法模型的凸优化问题。简单来说,前向分步算法就是从前向后,每一步仅优化一个基函数及其系数,逐步逼近目标函数。
Adaboost算法是前向分步算法的特例
2.梯度提升决策树(GBDT)
2.1 基于残差学习的提升树算法
从字面意思上来说,基于残差学习的提升树算法就是在回归过程中,每次 对残差进行拟合,学习一棵回归树,解决使用基函数预测时没有解决的那部分问题。主要算法如下:
2.2 梯度提升决策树算法GBDT
对不同的损失函数,提升树算法的优化难易程度不同。GBDT是针对这一问题,采用负梯度作为残差的近似值的一种回归树。当第一个基模型建立之后,计算最小的损失函数。此后根据损失函数的负梯度拟合回归树。依次拟合m个回归树,得到最终的模型。
梯度提升决策树需要加入一个较小学习率,以避免过拟合
3.算例
X, y = make_friedman1(n_samples=1200, random_state=0, noise=1.0)
X_train, X_test = X[:200], X[200:]
y_train, y_test = y[:200], y[200:]
est = GradientBoostingRegressor(n_estimators=100, learning_rate=0.1,max_depth=1, random_state=0, loss='ls').fit(X_train, y_train)
mean_squared_error(y_test, est.predict(X_test))
结果:5.009154859960319
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
X, y = make_regression(random_state=0)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
reg = GradientBoostingRegressor(random_state=0)
reg.fit(X_train, y_train)
reg.score(X_test, y_test)
结果:0.4391626730631196
4. GradientBoostingRegressor与GradientBoostingClassifier
sklearn.ensemble中关于梯度提升决策树的函数请参考:sklearn
在sklearn中,GradientBoostingClassifier为GBDT的分类类, 而GradientBoostingRegressor为GBDT的回归类。两者的参数类型完全相同,有些参数比如损失函数loss的可选择项并不相同。这些参数中,类似于Adaboost,可把参数分为两类,第一类是Boosting框架的重要参数,第二类是弱学习器即CART回归树的重要参数。
4.1 boosting框架参数
- n_estimators: 也就是弱学习器的最大迭代次数,或者说最大的弱学习器的个数。一般来说n_estimators太小,容易欠拟合,n_estimators太大,又容易过拟合,一般选择一个适中的数值。默认是100。
- learning_rate: 即每个弱学习器的权重缩减系数𝜈,也称作步长。默认为一。当步长最小时,意味着需要更多的弱学习器的迭代次数。
- subsample: 取值为1时,不使用子采样。
- init: 初始化的时的弱学习器。当不设置时,用训练集样本做初始化分类回归预测。
- loss: 损失函数,分类模型和回归模型不同。
- alpha: 这个参数只有GradientBoostingRegressor有,使用Huber损失"huber"和分位数损失“quantile”时,需要指定分位数的值。默认是0.9。
4.2 弱学习器参数
- max_features: 划分时考虑的最大特征数,默认None,意味着划分时考虑所有的特征数
- max_depth: 决策树最大深度
- min_samples_split: 内部节点再划分所需最小样本数,是限制子树继续划分的条件
- min_samples_leaf:叶子节点最少样本数
- min_weight_fraction_leaf:叶子节点最小的样本权重和
- max_leaf_nodes:最大叶子节点数,通过限制这个值,可以防止过拟合,默认为None
- min_impurity_split: 节点划分最小不纯度。这个值限制了决策树的增长,如果某节点的不纯度(基于基尼系数,均方差)小于这个阈值,则该节点不再生成子节点。即为叶子节点