当前位置:   article > 正文

趋势预测方法(七)XGBoost_决策树_趋势预测算法

趋势预测算法

XGBoost

a基本原理:

XGBoost算法预测时序数据的原理和GBDT算法原理类似,这里大致再提一下。用多个回归树将来拟合训练集,拟合好的模型需要做到多个回归树的结果之和训练集的结果一致,将该模型保存起来,之后只需要将要预测的数据再过一遍模型,即可得到预测数据结果。

 

b算法原理:

XGBoost(由陈天奇大佬开发,可以理解为X (Extreme) GBoosted)算法可以看作是GBDT算法的plus版本,本质上还是一个GBDT。

XGBoost与GBDT的区别主要还是目标函数的不同,目标函数只依赖于每个数据点在误差函数上的一阶导数和二阶导数。由于之前的目标函数求最优解的过程中只对平方函数有便利性,对于其他的平方损失函数处理会比较复杂。现在通过二阶泰勒展开式的变换,这样就可以比较方便的求解其他损失函数了。

 

c方法优缺点:

可以看成对于GBDT算法有很多的优点,缺点则是和它的改进算法Light GBM来讲的,它的缺点也就是Light GBM的优点,所以这里就先不讨论XGBoost的缺点了,在讲Light GBM的时候会写到。

 

对于GBDT的优势有:

  1. XGBoost的基分类器不仅可以是CART分类器,还支持线性分类器。

  2. GBDT在优化时只用到一阶导数,而XGBoost可以做到二阶泰勒展开。

  3. XGBoost在样本存在缺失值时,能自动学习分裂方向。

  4. XGBoost不仅可以防止过拟合,还能降低计算的复杂度,效率更高。

  5. XGBoost可以在每次迭代之后,为叶子节点分配学习速率,降低每棵树的权重,减少每 棵树的影响,为后面提供更好的学习空间。

  6. 可以分配多个cpu核心进行模型训练,减少模型训练时间。

d算法入口:

Sklearn里面没有集成XGBoost模型,但是网上有一个xgboost模块,需要安装才能使用

pip install xgboost

 

  1. # xgboost模型参数
  2. params = {
  3.     'booster':, # 用什么方式建树
  4.     'objective':,   # 多分类问题
  5.     'num_class':,  # 类别数,与multi softmax并用
  6.     'gamma':,    # 用于控制是否后剪枝的参数,越大越保守,一般0.1 0.2的样子
  7.     'max_depth':,  # 构建树的深度,越大越容易过拟合
  8.     'lambda':,  # 控制模型复杂度的权重值的L2 正则化项参数,参数越大,模型越不容易过拟合
  9.     'subsample':, # 随机采样训练样本
  10.     'colsample_bytree':,# 这个参数默认为1,是每个叶子里面h的和至少是多少
  11.     'silent':,  # 设置成1 则没有运行信息输入,最好是设置成0
  12.     'eta':,  # 如同学习率
  13.     'seed':,# random seed
  14.     'nthread':,  #CPU线程数
  15.     #'eval_metric':
  16. }

e实例参考:

  1. # -*- coding: utf-8 -*-
  2. '''
  3. 建立XGBoost决策树,并预测
  4. '''
  5. from sklearn.datasets import make_hastie_10_2
  6. import xgboost
  7. def change_y(y): # 转化label的值,由原来的[-1,1]为[0,1]
  8. for i in range(len(y)):
  9. if y[i] == -1.0:
  10. y[i] = 0.0
  11. return y
  12. # 使用make_hastie_10_2随机生成一组十维的数据X,和对应的输出值y,共12000条
  13. X, y = make_hastie_10_2(random_state=0)
  14. y = change_y(y)
  15. dtrain = xgboost.DMatrix(X[:4000], label=y[:4000])
  16. dtest = xgboost.DMatrix(X[4000:8000], label=y[4000:8000])
  17. y_test = y[8000:]
  18. # 配置基本参数
  19. params = {'max_depth': 4, # 最大深度
  20. 'booster': 'gbtree',
  21. 'seed': 0, # random seed
  22. 'silent': 0, # 设置成1 则没有运行信息输入,最好是设置成0
  23. 'lambda': 10, # 控制模型复杂度的权重值的L2 正则化项参数,参数越大,模型越不容易过拟合
  24. 'eta': 0.5, # 如同学习率
  25. 'gamma': 0.1, # 用于控制是否后剪枝的参数,越大越保守,一般0.1 0.2的样子
  26. 'num_class': 2 # 类别数
  27. }
  28. # 迭代拟合再预测
  29. xgb = xgboost.train(params=params, dtrain=dtrain, num_boost_round=100, evals=[(dtrain, 'train'), (dtest, 'eval')])
  30. ypred = xgb.predict(xgboost.DMatrix(X[8000:], missing=-999.0))
  31. error = 0
  32. for i in range(ypred.shape[0]): # 输出测试数据所有的预测和真实值
  33. print(ypred[i], y_test[i])
  34. if ypred[i] != y_test[i]:
  35. error += 1
  36. print('错误率:{}'.format(error / ypred.shape[0]))

这次还是以之前GBDT模型的数据为例,运行结果如下


f参考文献:

终于有人说清楚了--XGBoost算法 https://www.cnblogs.com/mantch/p/11164221.html

机器学习算法(15)之Xgboost算法 https://blog.csdn.net/qq_20412595/article/details/82621744

xgBoost的优缺点 https://blog.csdn.net/smartcat2010/article/details/103219643

Python机器学习笔记:XgBoost算法 https://www.cnblogs.com/wj-1314/p/9402324.html

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/112568
推荐阅读
  

闽ICP备14008679号