趋势预测方法(六)梯度下降树GBDT_决策树

梯度下降树GBDT

a基本原理:

利用梯度下降(提升)树GBDT算法拟合出最优的决策树,将拟合好的决策树保存下来。若出现需要预测的数据,只要将数据过一遍决策树,就可以获得预测的数值结果。在下文我会写梯度下讲树的工作原理。

b算法原理:

回归树

GBDT梯度下降树

GBDT的核心就在于,每一棵树学的是之前所有树结论和的残差,这个残差就是一个加预测值后能得真实值的累加量。

如存在一个真实值为20(真实值在test中并不会给出,这里只是便于理解),第一个树得到的预测值是12,那就目前来看真实值和预测值的差值还是蛮大的,所以这时就需要第二个回归树。

第二个回归树给出的预测值是8,那么GBDT的算法就可以结束了,如果第二个回归树给出的预测值比8要小,那么还需要建立第三个回归树……最终将每个回归树的结果加起来就是我们预测出来的值。

 

c方法优缺点:

优点:

  1. 预测精度高,能处理非线性的数据。

  2. 可以灵活处理各种类型的数据,包括连续值和离散值。

  3. 相对于SVM来说,在相对少的调参时间情况下,预测的准确率比较高。

  4. 使用一些健壮的损失函数,对异常值的鲁棒性非常强。

缺点:

  1. 高维数据算法复杂度大。

  2. 难以对训练样本进行人工控制。

 

d算法入口:

使用sklearn里的GradientBoostingClassifier函数可以较轻松训练好GBDT

sklearn.ensemble.GradientBoostingClassifier(loss=’deviance’,learning_rate=0.1,n_estimators=100,subsample=1,intit,max_depth=3,*args)

 

loss 损失函数

learning_rate 学习率,也被叫作步长。

n_estimators 弱学习器最大迭代次数。太大容易过拟合,太小容易欠拟合。

 subsample 即我们在原理篇的正则化章节讲到的子采样,取值为(0,1]。如果取值为1,则 全部样本都使用,等于没有使用子采样。如果取值小于1,则只有一部分样本 会去做GBDT的决策树拟合。

init 如果取值为1,则全部样本都使用,等于没有使用子采样。如果取值小于1, 则只有一部分样本会去做GBDT的决策树拟合。

Max_depth 决策树的最大深度

 

e实例参考:

# -*- coding: utf-8 -*-
'''
    建立GBDT梯度下降决策树,并预测
'''

from sklearn.datasets import make_hastie_10_2
from sklearn.ensemble import GradientBoostingClassifier

# 使用make_hastie_10_2随机生成一组十维的数据X,和对应的输出值y,共12000条
X, y = make_hastie_10_2(random_state=0)
X_train, X_test = X[:2000], X[2000:]
y_train, y_test = y[:2000], y[2000:]

# 迭代拟合再预测
gbdt = GradientBoostingClassifier(n_estimators=100, learning_rate=1.0, max_depth=3, random_state=0)
gbdt.fit(X_train, y_train)
pred = gbdt.predict(X_test)

error = 0
for i in range(pred.shape[0]):  # 输出测试数据所有的预测和真实值
    print(pred[i], y_test[i])
    if pred[i] != y_test[i]:
        error += 1

print('错误率:{}'.format(error / pred.shape[0]))

输出结果

f参考文献:

GBDT(MART) 迭代决策树入门教程 | 简介 https://blog.csdn.net/suranxu007/article/details/49910323

Regression Tree 回归树 https://zhuanlan.zhihu.com/p/82054400

GBDT回归树过程详解 https://www.cnblogs.com/zsgyx/p/12640611.html

GBDT算法的优缺点 https://blog.csdn.net/suv1234/article/details/72588048

scikit-learn 梯度提升树(GBDT)调参小结https://www.cnblogs.com/pinard/p/6143927.html

sklearn与GBDT入门案例 https://blog.csdn.net/levy_cui/article/details/72920366

gbdt算法_GBDT算法-从原理到sklearn应用到总结 https://blog.csdn.net/weixin_39856607/article/details/110659505

 

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值