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 ...
随机推荐
- python记录_day09 初识函数
一.认识函数 函数:对动作或者功能的封装 格式: 函数声明 def 函数名(): 函数体 函数调用 函数名() #定义函数 def xiao(): print("你的笑像一 ...
- 『Python』skimage图像处理_旋转图像
一段简短的实现图像旋转的代码,使用了skimage库,据说和PIL相比,skimage对numpy等科学计算库的支持更好,这里是为了完成师兄给的帮他修改程序的任务,如果以后有需求的话可能会对pytho ...
- Event IO Process
先了解一下process和event loop EventLoop 除了异步Server和Client库之外,Swoole扩展还提供了直接操作底层epoll/kqueue事件循环的接口.可将其他扩展创 ...
- sublime ctags跳转函数使用
sublime 点击某函数 按F12可以查到相关函数文件 正题: 1.下载ctags客户端文件 http://prdownloads.sourceforge.net/ctags/ctags58.zip ...
- 【转】大型Vuex项目 ,使用module后, 如何调用其他模块的 属性值和方法
Vuex 允许我们把 store 分 module(模块).每一个模块包含各自的状态.mutation.action 和 getter. 那么问题来了, 模块化+命名空间之后, 数据都是相对独立的, ...
- matlab作图 latex插图
推荐用saveas eps,再用eps2pdf转成pdf.这样可以之间pdflatex编译. if result.savepic saveas(gcf,[ pwd '/picture/right_' ...
- asp.net中javascript与后台c#交互
asp.net中javascript与后台c#交互 作者:熊猫大叔 字体:[增加 减小] 类型:转载 时间:2015-10-23我要评论,出处:http://www.jb51.net/article/ ...
- 未来Linux系统将是运维行业必备的技能之一
关于linux,这个并不是每个人都能用或者需要用的,因为平时有很多人用电脑只是为了上上网,聊聊天,打打游戏,这个是完全不需要用linux的.关于linux,是不能用正常的大家所熟知的window来认知 ...
- unity中把一个图片切割成两个UI图片
1.在unity3D的Project视图下选中需要更改的图片,将图片的Texture Type更改为Sprite (2D and UI),点击Apply即可.操作如图所示: 2.完成步骤一,点击App ...
- [Codeforces797F]Mice and Holes
Problem n个老鼠,m个洞,告诉你他们的一维坐标和m个洞的容量限制,问最小总距离. Solution 用dp[i][j]表示前i个洞,进了前j个老鼠的最小代价 dp[i][j]=min(dp[i ...