原理:
- 决策树基学习器 - GBDT使用决策树作为基学习器(base learner),每次迭代过程中生成一个新的决策树。
- 加法模型 - GBDT是一种加法模型(additive model),其预测结果是多个决策树预测结果的加权求和。
- 前向分步算法 - GBDT使用前向分步算法(forward stagewise algorithm)训练模型。每一步只学习一个新的决策树,使其能够尽可能好地减小整体模型的误差。
- 梯度提升 - GBDT利用梯度提升(gradient boosting)算法,使用损失函数的负梯度作为决策树的残差近似值,从而拟合新树。
- 正则化 - GBDT通过子采样、列采样、最大树深等超参数对模型进行正则化,防止过拟合。
使用方法(Python中的scikit-learn):
在scikit-learn中,GBDT主要由ensemble.GradientBoostingClassifier(分类)和ensemble.GradientBoostingRegressor(回归)两个类实现。下面以波士顿房价预测为例,说明如何使用GBDT进行回归:
from sklearn.datasets import load_boston
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.model_selection import train_test_split
# 加载数据
boston = load_boston()
X, y = boston.data, boston.target
# 拆分训练测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
# 创建GBDT回归器
gbrt = GradientBoostingRegressor(max_depth=4, n_estimators=200)
# 训练模型
gbrt.fit(X_train, y_train)
# 评估模型
print('MSE:', gbrt.score(X_test, y_test))
上述代码首先导入必要的库,加载波士顿房价数据集。然后使用train_test_split划分训练测试集。接下来,创建一个GradientBoostingRegressor对象,设置了树的最大深度为4,迭代200次生成200棵树。使用fit()方法训练模型,最后使用模型在测试集上评估均方误差(MSE)。对于GBDT,n_estimators控制生成的决策树数量,max_depth控制每棵树的最大深度。此外,还可以通过learning_rate设置学习率,通过subsample和max_features控制梯度提升过程中对样本和特征的采样比例等。GBDT通过组合多棵决策树往往能获得很高的预测精度,但也容易过拟合,需要合理的正则化。它在很多机器学习竞赛中表现优异,是一种非常实用和强大的算法。