梯度提升回归树

梯度提升回归树(梯度提升机)

梯度提升回归树是区别于随机森林的另一种集成方法,它的特点在于纠正加强,通过合并多个决策树来构建一个更为强大的模型。

该模型即可以用于分类问题,也可以用于回归问题中。

梯度提升回归树与随机森林的方法不同,梯度提升采用连续的方式构造树,每颗树都试图纠正前一颗树的错误,也可称为弱学习器。

三个重要参数

在该模型中,有三个重要参数分别为 n_estimators(子树数量)、learning_rate(学习率)、max_depth(最大深度)

子树数量 n_estimators

通常用来设置纠正错误的子树数量,梯度提升树通常使用深度很小(1到 5之间)的子树,即强预剪枝,来进行构造强化树。

并且这样占用的内存也更少,预测速度也更快。

学习率 learning_rate

通常用来控制每颗树纠正前一棵树的强度。

较高的学习率意味着每颗树都可以做出较强的修正,这样的模型普遍更复杂。

最大深度 max_depth

通常用于降低每颗树的复杂度,从而避免深度过大造成过拟合的现象。

梯度提升模型的 max_depth 通常都设置得很小,一般来讲不超过5。

GradientBoostingClassifier类的应用

下面是在乳腺癌数据集上应用sklearn.ensemble包GradientBoostingClassifier类的示例。

默认参数

默认使用100颗树,最大深度为3,学习率为0.1。

from sklearn.ensemble import GradientBoostingClassifier           #引入梯度提升回归树类
from sklearn.datasets import load_breast_cancer                   #加载乳腺癌数据集
from sklearn.model_selection import train_test_split              #引入切分数据集方法

cancer = load_breast_cancer()

X_train, X_test, y_train, y_test = train_test_split(cancer.data, cancer.target, random_state=0)    #切分数据集


grbt = GradientBoostingClassifier()         #定义梯度提升回归树模型
grbt.fit(X_train, y_train)                  #训练数据


print('Accuracy on training set: {:.3f}'.format(grbt.score(X_train, y_train)))
print('Accuracy on test set: {:.3f}'.format(grbt.score(X_test, y_test)))                            #输出训练集与测试集的结果

Accuracy on training set: 1.000
Accuracy on test set: 0.965

可见训练集的预测准确度为 100%, 测试集的准确度为 96.5%, 存在过拟合现象,接下来微调参数。

降低最大深度 max_depth
from sklearn.ensemble import GradientBoostingClassifier           #引入梯度提升回归树类
from sklearn.datasets import load_breast_cancer                   #加载乳腺癌数据集
from sklearn.model_selection import train_test_split              #引入切分数据集方法

cancer = load_breast_cancer()

X_train, X_test, y_train, y_test = train_test_split(cancer.data, cancer.target, random_state=0)    #切分数据集


grbt = GradientBoostingClassifier(max_depth=1)         #定义梯度提升回归树模型,子树最大深度设置为 1
grbt.fit(X_train, y_train)                             #训练数据


print('Accuracy on training set: {:.3f}'.format(grbt.score(X_train, y_train)))
print('Accuracy on test set: {:.3f}'.format(grbt.score(X_test, y_test)))                            #输出训练集与测试集的结果

Accuracy on training set: 0.991
Accuracy on test set: 0.972

可见,测试集性能有所提升,训练集性能有所降低,泛化能力加强。

降低学习率 learning_rate
from sklearn.ensemble import GradientBoostingClassifier           #引入梯度提升回归树类
from sklearn.datasets import load_breast_cancer                   #加载乳腺癌数据集
from sklearn.model_selection import train_test_split              #引入切分数据集方法

cancer = load_breast_cancer()

X_train, X_test, y_train, y_test = train_test_split(cancer.data, cancer.target, random_state=0)    #切分数据集


grbt = GradientBoostingClassifier(learning_rate=0.01)         #定义梯度提升回归树模型,学习率设置为 0.01
grbt.fit(X_train, y_train)                                    #训练数据


print('Accuracy on training set: {:.3f}'.format(grbt.score(X_train, y_train)))
print('Accuracy on test set: {:.3f}'.format(grbt.score(X_test, y_test)))                            #输出训练集与测试集的结果
Accuracy on training set: 0.988
Accuracy on test set: 0.958

可见,训练集与测试集预测准确度都有所下降,且泛化能力无明显加强,故学习率取默认值较好。

特征重要性分析

我们可以将梯度提升回归树的特征重要性可视化,便于更好地理解模型。

import matplotlib.pyplot as plt
import numpy as np

def plot_feature_importance_cancer(model):
    
    #获取到特征的个数
    n_features = cancer.data.shape[1]
    
    #根据重要性进行绘图
    plt.barh(range(n_features), model.feature_importances_, align='center')
    
    plt.yticks(np.arange(n_features), cancer.feature_names)
    plt.xlabel('Feature importance')
    plt.ylabel('Feature')

grbt = GradientBoostingClassifier(max_depth=1)                #树的最大深度设置为1
grbt.fit(X_train, y_train)                                    #训练数据
#绘图画出重要性
plot_feature_importance_cancer(grbt)

在这里插入图片描述

可以看到,梯度提升树的特征重要性与随机森林的特征重要性有些类似,不过梯度提升树完全忽略了某些特征。

优、缺点

梯度提升决策树是监督学习中最强大也是最常用的模型之一。

该算法无需对数据进行缩放就可以表现得很好,而且也适用于二元特征与连续特征同时存在的数据集。

缺点是需要进行仔细调参,且训练时间可能较长,通常不适用于高维稀疏数据。

  • 4
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Gaolw1102

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值