梯度提升决策树(GBDT)作为集成学习中的佼佼者,以其在分类和回归任务中的卓越性能,赢得了广大数据科学家的青睐。本文将带您深入探索GBDT的神秘面纱,并展示如何使用sklearn库高效实现GBDT。
介绍GBDT之前,让我们先介绍下提升树(Boosting Tree)
提升树是以 分类树 或 回归树 为基本分类器的提升方法。提升树被认为是统计学习中性能最好的方法之一。
提升方法实际采用加法模型( 即基函数的线性组合)与前向分步算法。以决策树为基函数的提升方法称为提升树( boosting tree)。对分类问题决策树是二叉分类树,对回归问题决策树是二叉回归树。
讯享网
提升树利用加法模型与前向分歩算法实现学习的优化过程。当损失函数是平方损失和指数损失函数时, 每一 步 优化是很简单的。但对 一般损失函数而言, 往往每一步优化并不那么容易。针对这一问题, Freidman 提出了 梯度提升( gradient boosting) 算法。它将问题转变成在损失函数梯度上寻找下降最快的方向,近似地求解。
GBDT 与提升树类似,模型依旧为加法模型、学习算法为前向分步算法。不同的是,GBDT 没有规定损失函数的类型,设损失函数为 。
Gradient Boosting 是 Boosting 中的一大类算法,它的思想借鉴于梯度下降法,其基本原理是「根据当前模型损失函数的负梯度信息来训练新加入的弱分类器」,然后将训练好的弱分类器以累加的形式结合到现有模型中。采用决策树作为弱分类器的 Gradient Boosting 算法被称为 GBDT。
让我们来看看如何使用scikit-learn库来实现GBDT算法。

梯度树提升Gradient Tree Boosting或梯度提升树(Gradient Boosted Decision Trees,GBDT)是Booting对任意可微损失函数的推广。GBDT是一种准确有效的现成程序,可用于各种领域的回归和分类问题,包括Web搜索、排名和生态领域。
集成模块 sklearn.ensemble 通过梯度提升树提供了分类和回归的方法。
注意:在LightGBM (参看 [LightGBM])的启发下,Scikit-learn 0.21引入了两种新的梯度提升树的实验实现,即 HistGradientBoostingClassifier和 HistGradientBoostingRegressor。当样本数大于数万个样本时,这些基于直方图的估计可以比
GradientBoostingClassifier和GradientBoostingRegressor快几个数量级。他们还内置了对缺失值的支持,从而避免了计算的需要。这些估计器将在下面基于直方图的梯度提升Histogram-Based Gradient Boosting中更详细地描述。
下面的指南重点介绍
GradientBoostingClassifier和GradientBoostingRegressor,它们可能是小样本大小的首选,因为在这个设置中,装箱可能会导致分割点过于接近。
-
导入必要的库:from sklearn.ensemble import GradientBoostingClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
讯享网 -
加载数据:讯享网
# 加载鸢尾花数据集
iris = load_iris()
X, y = iris.data, iris.target -
划分数据集:# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) -
创建GBDT分类器:讯享网
# 创建GBDT分类器实例
gbdt = GradientBoostingClassifier(n_estimators=100, learning_rate=0.1, max_depth=3, random_state=42)调参是提升GBDT性能的关键步骤。以下是一些常用的调参策略:
-
n_estimators:控制弱学习器的数量,需要权衡模型复杂度和过拟合风险。 -
learning_rate:学习率较小意味着需要更多的弱学习器来达到相同的拟合效果。 -
max_depth:控制决策树的深度,防止模型过于复杂。 -
subsample:样本抽样比例,小于1可以减少过拟合。 -
max_features:划分时考虑的最大特征数,可以是整数或百分比。 -
训练模型:# 训练模型
gbdt.fit(X_train, y_train) -
评估模型:讯享网
# 预测
y_pred = gbdt.predict(X_test)
# 计算准确率
from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y_test, y_pred)
print(f”Accuracy: {accuracy:.2f}“)


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/202226.html