Skip to content

第5章:梯度提升树(Gradient Boosting Trees)

梯度提升树(Gradient Boosting Trees,GBT)是一种流行的集成学习算法,它通过迭代地训练决策树来最小化损失函数。本章将详细介绍梯度提升树的原理、应用场景以及如何使用Scikit-Learn实现梯度提升树模型。

5.1 梯度提升树原理

5.1.1 集成学习

梯度提升树是一种集成学习方法,它结合了多个弱学习器(决策树)的预测结果。

5.1.2 梯度提升

梯度提升通过迭代地添加新的决策树来纠正前一个模型的错误,每一步都针对前一步的残差进行优化。

5.1.3 损失函数优化

梯度提升树通过优化损失函数来训练每一棵树,常用的损失函数包括均方误差(MSE)和对数损失(log loss)。

5.2 梯度提升树应用

5.2.1 分类问题

梯度提升树可以用于分类问题,通过调整损失函数和参数,可以处理二分类和多分类任务。

5.2.2 回归问题

在回归问题中,梯度提升树能够处理连续的输出变量,预测精度高。

5.2.3 特征选择

梯度提升树可以用于特征选择,通过评估每个特征对模型的贡献度。

5.3 梯度提升树代码实现

5.3.1 数据准备

我们将使用Scikit-Learn的乳腺癌数据集来演示梯度提升树的实现。

python
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split

# 加载数据集
cancer = load_breast_cancer()
X = cancer.data
y = cancer.target

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

5.3.2 模型训练

使用Scikit-Learn的GradientBoostingClassifier类来训练梯度提升树模型。

python
from sklearn.ensemble import GradientBoostingClassifier

# 创建梯度提升树分类器实例
gbt_classifier = GradientBoostingClassifier(n_estimators=100, learning_rate=0.1, random_state=42)

# 训练模型
gbt_classifier.fit(X_train, y_train)

5.3.3 模型评估

评估模型在测试集上的性能。

python
from sklearn.metrics import accuracy_score

# 在测试集上进行预测
y_pred = gbt_classifier.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy:.2f}")

5.3.4 特征重要性评估

评估特征的重要性。

python
# 获取特征重要性
feature_importances = gbt_classifier.feature_importances_

# 可视化特征重要性
import matplotlib.pyplot as plt

plt.barh(range(len(feature_importances)), feature_importances)
plt.yticks(range(len(feature_importances)), cancer.feature_names)
plt.xlabel("Feature Importance")
plt.title("Feature Importance in Gradient Boosting Trees")
plt.show()

5.4 本章小结

本章介绍了梯度提升树的基本原理、应用场景,并使用Scikit-Learn实现了一个简单的梯度提升树模型。通过数据准备、模型训练、评估和特征重要性评估,我们可以看到梯度提升树在分类和回归问题中的有效性。理解梯度提升树的工作原理和代码实现对于深入学习集成学习方法至关重要。