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

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

e实例参考:

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

趋势预测方法(七)XGBoost_决策树相关推荐

  1. 【论文解读】一种基于时间卷积网络的知识驱动股票趋势预测方法

    写在前面 下面这篇文章的内容主要是来自论文<Knowledge-Driven Stock Trend Prediction and Explanation via Temporal Convol ...

  2. 机器学习笔记(七)——决策树模型

    引言 决策树(Decision Tree)是一种基本的分类和回归方法.它的扩展方法有GBDT和GBRT 等.决策树模型的学习过程主要有特征选择.决策树生成和剪枝.主要算法有ID3.C4.5和CART等 ...

  3. 通俗易懂的MonteCarlo积分方法(七)

    通俗易懂的MonteCarlo积分方法(七) 一.设计的基本GUIGUIGUI格式menteCarlo.figmenteCarlo.figmenteCarlo.fig 二.设计MatlabMatlab ...

  4. AIGC:ChatGPT(一个里程碑式的对话聊天机器人)的简介(意义/功能/核心技术等)、使用方法(七类任务)、案例应用(提问基础性/事实性/逻辑性/创造性/开放性的问题以及编程相关)之详细攻略

    AIGC:ChatGPT(一个里程碑式的对话聊天机器人)的简介(意义/功能/核心技术等).使用方法(七类任务).案例应用(提问基础性/事实性/逻辑性/创造性/开放性的问题以及编程相关)之详细攻略 导读 ...

  5. Lex和Yacc使用方法(七).企业方面的实际应用

    Lex和Yacc应用方法(七).企业方面的实际应用 20070527 草木瓜 一.前言 说到这里,也许有人觉得要把这些东西实际应用起来,还没谱,或许很多人觉得工作中很 少能使用到.     本文的主要 ...

  6. 计算机维修七方法,七种常用方案解决电脑没声音故障

    有的时候出现电脑没声音怎么办?请人维修花费不少钱!以下晓龙编辑(www.lopc.com)提供几种电脑技术员常用的方案给大家分享,也希望大家看完电脑没有声音方案后可以立刻解决! 电脑没声音维修思路一: ...

  7. Effective Java之保护性编写readObject方法(七十六)

    readObject方法实际上相当于另一个公有的构造器,与其他构造器一样,它也需要进行参数的有效性检查与保护性拷贝.参考:Effective Java之必要时进行保护性拷贝(三十九) 原因很简单,为了 ...

  8. Effective Java之避免使用终结方法(七)

    1.终结方法的缺点 1.终结方法不能保证及时执行,因此注重时间的任务不应该由终结方法来完成.例如:用终结方法去关闭已经打开的文件,这是一种严重错误,因为打开文件描述符是一种很有限的资源,如果jvm延迟 ...

  9. 趋势预测方法(五)Holt-Winters模型_时序递推预测

    Holt-Winters模型 a基本原理: 该方法有点类似于MA(移动平均)的思路,是对MA的优化.主要因为MA的参数数量过多时,计算时间慢,且计算复杂.Holt-Winters利用三次指数平滑法,将 ...

最新文章

  1. python3.6.2安装教程-CentOS 6.5中安装Python 3.6.2的方法步骤
  2. python中rim的用法_Python笔记(六)_函数
  3. tomcat基本使用和超图基本jsp例子
  4. 如何正确的在一个循环中删除ArrayList中的元素。
  5. Some cloud foundry deployment screenshot
  6. mysql dba命令_mysql DBA:mysqladmin常用命令总结
  7. linux下下载fnl数据,NCEP再分析资料FNL数据在windows平台用cygwin批量下载方法
  8. mongodb创建图书管理_基于vue 和 node Mongodb 的 图书管理系统
  9. 如何防止游戏通讯数据被篡改
  10. 四阶行列式直接展开_四阶行列式的完全展开式共有多少项
  11. 计算机excel中钱的符号,在excel中输入钱的符号
  12. vue3项目打包优化三步走
  13. C#+Selenium+Nunit demo
  14. if语句和三元运算符哪个效率更高
  15. 激活层是每一层都有吗_广式小吃甜“薄撑”,又香又脆,每一层都有料,大人小孩都爱吃...
  16. 转: 云计算openstack—云计算、大数据、人工智能
  17. Http Post、Get提交工具
  18. Activity中AndroidMainfest启动模式
  19. 【语音处理】一种增强的隐写及其在IP语音隐写中的应用(Matlab代码实现)
  20. MATLAB--数字图像处理 Otsu算法(MATLAB原理验证)

热门文章

  1. 博客作业回答记录1--“软件工程是不是教会不怎么会写程序的人开发软件?你的观点?”
  2. ios13修改dns都用什么服务器,苹果手机用哪个dns最快?教你配置DNS让网速飞起
  3. unity中实现镜子效果
  4. IOTOS物联中台开发驱动支持中安易科智能门锁API 详解
  5. php cstr,小心stringstream.str()字符串用法的陷阱
  6. Paper:RNN之《Generating Sequences With Recurrent Neural Networks用循环神经网络生成序列》的翻译和解读
  7. 微服务及其框架是什么
  8. 9.Redis 管道(pipe mode)
  9. 12自由度六足机器人实现原地舞蹈功能
  10. 近世代数 笔记和题型连载:第四章(半群和独异点)