xgboost原理及调参方法-通俗易懂版本

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了xgboost原理及调参方法-通俗易懂版本相关的知识,希望对你有一定的参考价值。

参考技术A   xgboost是各种比赛中最常使用的方法,网上介绍非常多,但是大部分看起来都比较费劲,这篇文章我将通俗的讲一下xgboost是在干什么,是怎么实现的,每一步的细节中要注意什么问题,达到理解—应用的程度,想了解具体理论的各位看官请移步其他文章。

  说起xgboost,我们不得不提一下GBDT,也就是梯度提升决策树,这是一种基于树的集成算法,至于什么方法构成了GBDT的决策树,无非就是ID3、C4.5、C5.0、CART,最常用的就是那个CART,多棵树的集合就构成了GBDT。其实GBDT是对残差的拟合,什么意思呢?假设目标函数是9,第一棵树预测为5,剩下4的误差,那么下一颗树继续拟合4,直至误差满足我们的要求,这和xgboost的思路是一样的。那么问题来了,有了GBDT为啥还要用xgboost呢,有一种说法是,GBDT的每一步优化都依赖于上一步的误差,当大数据量的时候就太慢了,xgboost通过改变目标函数来避免了这个问题。
  GBDT的目标函数是预测值和真实值差的累加,也就是误差累加,可以看出每一步计算都依赖于上面所有步的误差,效率比较低。xgboost自然要做出改进,怎么优化呢,一步步分解来看。

  python简直太友好了,可以直接调用xgboost包跑程序,我们要做的就是提取指标和调参,提取指标这个事我教不了你,得根据业务来,调参倒是有套路可寻。首先你要实现一个xgboost,你要知道你用什么工具去实现,python里有两个包,一个就叫xgboost,另外一个是xgboost的sklearn接口,叫XGBClassifer。另外要调参还有一个并行的网格搜索包,sklearn里的GridSearchCV。其他还有一些包需要引入就是打打辅助。

  准备工作已经做好了,接下来开始调参工作了,调参之前大家记得要做两件件事,就是先把数据整理好,把模型搭建好。

  简单的很,已经引入了XGBClassifier,直接把相关默认参数设置好就可以了。

我们看到在建立xgboost的模型时,有很多参数,这些参数是什么意思呢,我们来看一下。

  知道了这些参数,想要弄明白调参是干啥,调整什么就很容易了,下面会结合例子来说明。

  先来推荐一个大哥的博客,这个链接里 https://blog.csdn.net/u014465639/article/details/74351982 写了好几种模型的调参方法,想要了解的不妨去看看。
  开始之前,给大家介绍一个新朋友,这个东西可以很好的帮助我们进行调参,它是sklearn里的一个包,[sklearn.model_selection.GridSearchCV],我们调参就是基于这个包的。那么这个包怎么实现调参呢,来看一眼它的常用参数。
(1)estimator:优化器,也就是你建立的模型,这里自然就是xgboost模型,如果要对其他集成算法调优,那就写其他模型了,注意模型需要初始化哦。
(2)param_grid:字典或者列表,一般用字典,请在这里输入你要优化的参数值。
(3)scoring :用啥子估计误差,如果不设置,那我没办法了,就用estimator的误差来衡量吧。
  有了上面的方法,我们还会怕调参数吗,当然不会了,先设置好常用的参数,然后再依次调参。请注意,调参是有顺序的,按照下面这个来。

  咦,这里边有n_estimators的值了,其实就是以他为基准进行挑选啊,首先给个基础值进去,给谁啊,当然是建立的初始模型了。

  然后跑一下模型,这个我最后统一说,反正最后给出一个最优值,但是我们设置的粒度太粗了,不能直接用,接下来细调,同样方法跑一遍。

  基本调参就告一段落了,这里需要特别指出一点就是调参可以提高模型性能,但是更重要的还是特征选择,数据清洗,特征融合等工作,大家注意把基础工作做好。

  基础数据啥的我就不列了啊,大概说一下概要吧,和网上的不一样,我也是按照自己的想法做了一些省略。

以上是关于xgboost原理及调参方法-通俗易懂版本的主要内容,如果未能解决你的问题,请参考以下文章

HashMap的工作原理(图文+例子)详解,绝对简单通俗易懂

手摸手教你 HTTPS 的原理(通俗易懂!)

通俗易懂的epoll

通俗易懂的epoll

通俗易懂的epoll

张三李四手摸手教你 HTTPS 的原理(通俗易懂!)