开源学习地址:datawhale
前向分步算法是集成学习中一个非常重要的框架,它的出现解决了Adaboost加法模型的凸优化问题。简单来说,前向分步算法就是从前向后,每一步仅优化一个基函数及其系数,逐步逼近目标函数。
Adaboost算法是前向分步算法的特例
从字面意思上来说,基于残差学习的提升树算法就是在回归过程中,每次 对残差进行拟合,学习一棵回归树,解决使用基函数预测时没有解决的那部分问题。主要算法如下:
对不同的损失函数,提升树算法的优化难易程度不同。GBDT是针对这一问题,采用负梯度作为残差的近似值的一种回归树。当第一个基模型建立之后,计算最小的损失函数。此后根据损失函数的负梯度拟合回归树。依次拟合m个回归树,得到最终的模型。
梯度提升决策树需要加入一个较小学习率,以避免过拟合
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
sklearn.ensemble中关于梯度提升决策树的函数请参考:sklearn
在sklearn中,GradientBoostingClassifier为GBDT的分类类, 而GradientBoostingRegressor为GBDT的回归类。两者的参数类型完全相同,有些参数比如损失函数loss的可选择项并不相同。这些参数中,类似于Adaboost,可把参数分为两类,第一类是Boosting框架的重要参数,第二类是弱学习器即CART回归树的重要参数。