XGboost学习总结
XGboost,全称Extrem Gradient boost,极度梯度提升,是陈天奇大牛在GBDT等传统Boosting算法的基础上重新优化形成的,是Kaggle竞赛的必杀神器。
XGboost属于集成学习的模型,在集成学习中主要有三个算法,Bagging,Boosting和Stacking,Bagging算法的优秀代表是RF(随机森林),Boosting算法的优秀代表有
Adaboosing,GBDT和XGboost,Stacking算法貌似没有什么优秀的代表,算是一种集成的思想,在Kaggle竞赛中用的比较多。
先来说一说XGboost的优点,用过的人就知道,它哪里都是优点。
1.损失函数
机器学习中常用的损失函数主要有:指数损失,合页损失,零一损失,交叉熵损失,平方损失等等,XGboost这方面有几个好处,首先XGboost可以自定义损失函数,你可以选择以上常用的损失函数,也可以根据实际问题的具体情况自定义损失函数,提供了极大的灵活性,对于解决实际问题非常有帮助;其次,在优化损失函数时,XGboost用泰勒公式对目标损失函数进行展开,二阶求导,一方面更加准确,另一方面将损失函数本身和优化方法分离开,可以在事先不指定具体的损失函数的情况下进行目标函数的优化,具有极大的灵活性。
2.正则化
XGboost在目标损失函数后面加了一个自定义的正则化项,这个正则化项是自定义的树的复杂度,正则项里包含了树的叶子节点个数、每个叶子节点上输出的score的L2模的平方和,这样做有效的控制了模型的复杂度。
3.Shrinkage(缩减)
Shrinkage(缩减)相当于学习速率(xgboost中的eta)。xgboost在进行完一次迭代后,会将叶子节点的权重乘上该系数,主要是为了削弱每棵树的影响,让后面有更大的学习空间。实际应用中,一般把eta设置得小一点,然后迭代次数设置得大一点。
4.列采样
xgboost借鉴了随机森林的做法,支持列抽样,不仅能降低过拟合,还能减少计算,这也是xgboost异于传统gbdt的一个特性
5.支持并行计算
XGboost在训练每一棵树的时候,是迭代式训练,是线性的,这是无法做到并行计算的,但是训练一棵树最费时间的是进行节点分裂时计算每个属性的增益,以及每一个属性的最佳切割点,XGboost在计算最佳分裂属性和最佳切割点时可以调用CPU进行多线程的并行计算,极大的节约了时间,加速了训练过程。
6.支持确实值的处理
对缺失值的处理,对于特征的值有缺失的样本,xgboost可以自动学习出它的分裂方向
7.非贪心算法
XGboost在确定最佳切割点时,并没有采用传统的贪心算法遍历每一个可能的分割点,而是先筛选出一个候选集和,然后在候选集合中确定最佳切割点。
。。。。。,当然还有别的,这里就不一一列举了。
在使用工具方面,XGboost可以和sklearn结合使用,xgboost可以接收普通的numpy数组形式的特征矩阵,也可以接收libsvm形式的稀疏距阵的压缩格式,当特征距阵比较稀疏时,后者更加节约内存空间。
对于libsvm格式的文件,sklearn工具调用如下:
from sklearn.datasets import load_svmlight_file
load_svmlight_file(my_workpath + 'agaricus.txt.train')
xgboost调用如下:xgb.Dmatrix(路劲)
模型可视化工具:xgb.to_graphviz(model,num_trees)(前提是系统安装了graphviz软件)
参数选择和调优:k折交叉验证和网格索搜:GridSearchCV
防止过拟合:earlystop,集成学习,正则化,交叉验证,增强数据
bst.fit(X_train_part, y_train_part, early_stopping_rounds=100, eval_metric="error",
eval_set=eval_set, verbose=True),可以看到,随着在训练集上迭代次数的增多,所得模型在测试集 上的性能的变化,是否发生过拟合的情况。
data.isnull().sum():统计所有特征关键字非空的的数目
data['class'].unique():某一列特征有多少种取值
以下:根据特征重要性画图
from xgboost import plot_importance
plot_importance(model_XGB)
pyplot.show()
XGboost学习总结的更多相关文章
- 【新人赛】阿里云恶意程序检测 -- 实践记录11.10 - XGBoost学习 / 代码阅读、调参经验总结
XGBoost学习: 集成学习将多个弱学习器结合起来,优势互补,可以达到强学习器的效果.要想得到最好的集成效果,这些弱学习器应当"好而不同". 根据个体学习器的生成方法,集成学习方 ...
- xgboost学习与总结
最近在研究xgboost,把一些xgboost的知识总结一下.这里只是把相关资源作总结,原创的东西不多. 原理 xgboost的原理首先看xgboost的作者陈天奇的ppt 英文不太好的同学可以看看这 ...
- xgboost学习
1.原理 https://www.cnblogs.com/zhouxiaohui888/p/6008368.html 2.实战 xgboost中比较重要的参数介绍: (1)学习率:learning r ...
- 数据竞赛利器 —— xgboost 学习清单
1. 入门大全 xgboost 作者给出的一份完备的使用 xgboost 进行数据分析的完整示例代码:A walk through python example for UCI Mushroom da ...
- XGBoost学习笔记2
XGBoost API 参数 分类问题 使用逻辑回归 # Import xgboost import xgboost as xgb # Create arrays for the features a ...
- XGBoost学习笔记1
XGBoost XGBoost这个网红大杀器,似乎很好用,完事儿还是自己推导一遍吧,datacamp上面有辅助的课程,但是不太涉及原理 它究竟有多好用呢?我还没用过,先搞清楚原理,hahaha~ 参考 ...
- 【Python机器学习实战】决策树与集成学习(七)——集成学习(5)XGBoost实例及调参
上一节对XGBoost算法的原理和过程进行了描述,XGBoost在算法优化方面主要在原损失函数中加入了正则项,同时将损失函数的二阶泰勒展开近似展开代替残差(事实上在GBDT中叶子结点的最优值求解也是使 ...
- xgboost原理及应用
1.背景 关于xgboost的原理网络上的资源很少,大多数还停留在应用层面,本文通过学习陈天奇博士的PPT 地址和xgboost导读和实战 地址,希望对xgboost原理进行深入理解. 2.xgboo ...
- xgboost原理及应用--转
1.背景 关于xgboost的原理网络上的资源很少,大多数还停留在应用层面,本文通过学习陈天奇博士的PPT地址和xgboost导读和实战 地址,希望对xgboost原理进行深入理解. 2.xgboos ...
随机推荐
- 小程序点击事件改变样式(普通js鼠标点击事件)
1.wxml中 <view class="column"> <view class="body-view {{num==1?'active':''}}& ...
- P2375 [NOI2014]动物园
考虑kmp. 这个题的主要问题就在于怎样使复杂度是正确的O(n). 可以先预处理一个数组cnt[]表示不考虑不能相交这个限制,有多少个border. 这个东西其实也就是fail树上的深度. 然后考虑怎 ...
- Tree总结
树结构问题因为容易写出解法,因此经常出现在面试题中 1. 树的种类 1) Tree 2) Binary Trees 3) Binary Search Trees(BST) : used to sort ...
- python记录_day11 闭包 迭代器
一.第一类对象: 函数名是一个变量,可以当普通变量使用,但它又是一个特殊的变量,与括号配合可以执行函数. 函数名的运用 1.单独打印是一个内存地址 2.可以给其他变量赋值 3.可以作为容器类变量的元素 ...
- 『TensorFlow』SSD源码学习_其六:标签整理
Fork版本项目地址:SSD 一.输入标签生成 在数据预处理之后,图片.类别.真实框格式较为原始,不能够直接作为损失函数的输入标签(ssd向前网络只需要图像就行,这里的处理主要需要满足loss的计算) ...
- 第二阶段——个人工作总结DAY08
1.昨天做了什么:昨天就时间轴的问题,已经实现了界面的显示. 2.今天打算做什么:打算继续学习<第一行代码>中关于异步任务,多线程,访问网络等后台的知识. 3.遇到的困难:还不太懂具体的步 ...
- springboot添加log4j日志配置log4j.xml生成日志文件
第一步:添加pom文件依赖 <!-- log4j --> <dependency> <groupId>org.springframework.boot</gr ...
- 如何利用redis key过期事件实现过期提醒
https://blog.csdn.net/zhu_tianwei/article/details/80169900 redis自2.8.0之后版本提供Keyspace Notifications功能 ...
- Android 之常用布局
LinearLayout 线性布局. android:orientation="horizontal" 制定线性布局的排列方式 水平 horizontal 垂直 vertical ...
- Linux 第一周作业
[](http://images2017.cnblogs.com/blog/1249774/201710/1249774-20171001234038872-10d31233192.pngd