Java教程

集成学习中笔记04 前向分布算法与梯度提升决策树

本文主要是介绍集成学习中笔记04 前向分布算法与梯度提升决策树,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

集成学习中笔记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: 即每个弱学习器的权重缩减系数
这篇关于集成学习中笔记04 前向分布算法与梯度提升决策树的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!