sklearn.ensemble.GradientBoostingRegressor
(梯度提升回归器)
GradientBoostingRegressor
是 sklearn.ensemble
提供的 梯度提升树(GBDT,Gradient Boosting Decision Tree) 回归模型,通过 逐步优化每棵决策树,使其学习前一棵树的误差,提高回归预测能力,适用于 非线性回归任务。
1. GradientBoostingRegressor
作用
- 用于回归任务(如 房价预测、股票趋势分析)。
- 通过序列化训练多个决策树,每棵树学习前一棵树的误差,提升模型表现。
- 适用于中等规模数据,泛化能力强,但训练时间比随机森林长。
2. GradientBoostingRegressor
代码示例
(1) 训练梯度提升回归器
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
# 生成回归数据
X, y = make_regression(n_samples=100, n_features=1, noise=10, random_state=42)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 训练梯度提升回归模型
model = GradientBoostingRegressor(n_estimators=100, learning_rate=0.1, max_depth=3, random_state=42)
model.fit(X_train, y_train)
# 预测
y_pred = model.predict(X_test)
# 计算 R²
r2 = model.score(X_test, y_test)
print("梯度提升回归器 R²:", r2)
解释
n_estimators=100
:使用100
棵决策树,每棵树逐步优化前一棵树的误差。learning_rate=0.1
:学习率,控制每棵树对最终预测的贡献(降低learning_rate
需增加n_estimators
)。max_depth=3
:限制树的深度,防止过拟合。
3. GradientBoostingRegressor
主要参数
GradientBoostingRegressor(n_estimators=100, learning_rate=0.1, max_depth=3, subsample=1.0, criterion="squared_error", random_state=None)
参数 | 说明 |
---|---|
n_estimators | 决策树数量(默认 100 ,值越大,模型越强但训练时间变长) |
learning_rate | 学习率(默认 0.1 ,较小的值提高泛化能力,但需要更多树) |
max_depth | 每棵树的最大深度(默认 3 ,值过大易过拟合) |
subsample | 每轮训练使用的样本比例(默认 1.0 ,可设为 0.8 提高泛化能力) |
criterion | 损失函数(默认 "squared_error" ,衡量分裂质量) |
random_state | 设置随机种子,保证结果可复现 |
4. 获取特征重要性
import numpy as np
feature_importances = model.feature_importances_
print("特征重要性:", feature_importances)
解释
feature_importances_
返回每个特征的重要性(值越大,该特征越关键)。
5. 计算模型性能
from sklearn.metrics import mean_squared_error, r2_score
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print("均方误差 MSE:", mse)
print("决定系数 R²:", r2)
解释
- MSE(均方误差):值越小,拟合效果越好。
- R²(决定系数):
1
表示完美拟合,0
表示无解释能力。
6. GradientBoostingRegressor
vs. RandomForestRegressor
模型 | 适用情况 | 主要区别 |
---|---|---|
RandomForestRegressor | 多个决策树并行训练 | 降低过拟合,训练速度快 |
GradientBoostingRegressor | 逐步优化误差,提高回归精度 | 训练速度较慢,但效果更强 |
示例
from sklearn.ensemble import RandomForestRegressor
rf = RandomForestRegressor(n_estimators=100, random_state=42)
rf.fit(X_train, y_train)
print("随机森林回归器 R²:", rf.score(X_test, y_test))
print("梯度提升回归器 R²:", model.score(X_test, y_test))
解释
- GBDT 适用于中等规模数据,
RandomForest
训练速度更快。
7. learning_rate
对模型的影响
import numpy as np
learning_rates = [0.01, 0.1, 0.2, 0.5]
for lr in learning_rates:
model = GradientBoostingRegressor(n_estimators=100, learning_rate=lr, max_depth=3, random_state=42)
model.fit(X_train, y_train)
print(f"学习率={lr}, 测试集 R²={model.score(X_test, y_test)}")
解释
- 较小的
learning_rate
(如0.01
)需要更多树(n_estimators
)来达到相同效果。 - 较大的
learning_rate
(如0.5
)可能导致过拟合。
8. 适用场景
- 回归任务(如 房价预测、股票趋势预测)。
- 数据量适中(几千到几十万样本),避免过长训练时间。
- 当
RandomForestRegressor
不足时,GBDT 可能更优。
9. 结论
GradientBoostingRegressor
适用于回归任务,逐步优化误差,提高回归预测能力,比随机森林训练 更慢但效果更强,可以 调整learning_rate
和n_estimators
控制模型复杂度。