CatBoost原文:
《CatBoost:gradient boosting with categorical features support》-2018
俄罗斯人写的文章,真的是…唉…
用词习惯和英美作者风格不太一致.
###################################################
先说下文章结构吧:
原文结构={1.Introduction2.Categoricalfeatures3.FightingGradientBias4.FastScocer5.FasttrainingonGPU6.Experiments原文结构=\left\{ \begin{aligned} 1.Introduction \\ 2.Categorical\ features \\ 3.Fighting\ Gradient\ Bias\\ 4.Fast\ Scocer\\ 5.Fast\ training\ on\ GPU\\ 6.Experiments\\ \end{aligned} \right.原文结构=⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧​1.Introduction2.Categorical features3.Fighting Gradient Bias4.Fast Scocer5.Fast training on GPU6.Experiments​

所以文章第2、3部分是重点,其他是讲怎么在速度上优化的,即使你去读博士,你不搞这个研究方向,那就没必要看.

下面这个博客解读了catboost在youtube中的讲解内容
https://blog.csdn.net/friyal/article/details/82758532
先说说问题:
上面的这个博客中提到CatBoost使用的是完全对称树来解决过拟合问题,关于这个,
我个人…不是太看好…
因为,过拟合问题,不能纯粹的使用对称树来解决,对称树不可能解决所有的过拟合的情况,而应该具体问题具体对待.

##################################
注意,这篇文章中说的GBDT和百度上的GBDT不是一个意思.
过往的算法先回顾下:
GBDT:每一颗树的建立都使用残差
XGBOOST:每棵树之间地位是等同的,使用特征列采样来建立树.
这篇文章把GBDT和XGBOOST都称为是GBDTS,意即:
GBDTS={1.GBDT2.XGBOOSTGBDTS=\left\{ \begin{aligned} 1.GBDT \\ 2.XGBOOST \\ \end{aligned} \right.GBDTS={1.GBDT2.XGBOOST​
这个算法的优点就是提供了GPU版本,并且能够独热一些离散特征.

#########################################
下面详解文章的2、3部分,分别讲了啥.
注意哈,论文原文中对算法细节的讲解不如上面那篇博客那么详细.

2.Categorical features
这个标题的意思就是离散特征.
为啥取了这么个奇怪的名字呢?
因为这个部分是讲解怎么把离散特征的处理过程与标签(也就是y,你懂的)给关联起来,所以在标签中没有使用discrete features的说法,也就是说,底层依然是Cart,我们知道,Cart是不能接收离散特征值为字符串的情况的.

文章这一部分的主要贡献是:
根据过往的:
∑j=1n[xj,k=xi,k]⋅Yj∑j=1n[xj,k=xi,k]\frac{\sum_{j=1}^n[x_{j,k}=x_{i,k}]·Y_j}{\sum_{j=1}^n[x_{j,k}=x_{i,k}]}∑j=1n​[xj,k​=xi,k​]∑j=1n​[xj,k​=xi,k​]⋅Yj​​
改成:
∑j=1p−1[xσj,k=xσp,k]Yσ,j+a⋅P∑j=1p−1[xσj,k=xσp,k]\frac{\sum_{j=1}^{p-1}[x_{\sigma_{j},k}=x_{\sigma_{p},k}]Y_{\sigma,j}+a·P}{\sum_{j=1}^{p-1}[x_{\sigma_{j},k}=x_{\sigma_{p},k}]}∑j=1p−1​[xσj​,k​=xσp​,k​]∑j=1p−1​[xσj​,k​=xσp​,k​]Yσ,j​+a⋅P​

好了,打住装逼,讲人话,这个东西到底是干嘛的?
∵Cart决策树无法处理取值为字符串型的离散特征
∴用来把离散特征变成数值型特征的.
上面的σj\sigma_jσj​表示第j条数据(所以俄罗斯人用符号也很奇怪)
上面的k表示第k列,第k个特征(这个特征是离散特征)

这里的中括号论文中说是Iverson brackets,
你看看,俄罗斯人的用词,真是无力吐槽.
讲人话,这个中括号就是指示函数,符合里面的条件就为1,否则就为0.

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
整个式子的意思是,把xσj,kx_{\sigma_{j},k}xσj​,k​也就是第σj\sigma_{j}σj​条数据中的第k个特征替换为上面的式子.

上面这个式子的理论依据是啥?☆☆☆☆☆☆
根据我的理解,是李航的<统计学习方法>中的P51的式(4.10)贝叶斯估计.
然后这一部分还提了特征整合,但是论文中没有细讲,参考上面的那个链接就好了.

接下来第3部分:
3.Fighting Gradient Bias:
先上算法:


这部分开头说要解决一个biased pointwise gradient estimates
这个是什么意思呢?就是下面这个图,说人话就是噪声点问题.

所以作者提出了一个设想,为了避免使用异常点,训练时不使用这个点.
但是这样的话,岂不是一开始的训练也进行不下去了?
于是作者提出了一些技巧:
一开始对整个数据集进行s次随机排序.
文中写道:
For each permutation σ\sigmaσ,we train n different models MiM_iMi​.
所以到这里为止,复杂度已经有O(sn)O(sn)O(sn)了
对于每次排序:
对于每个模型MiM_iMi​(指的是去除第i条数据,为了以防异常点的影响)
我们更新Mi(X1),⋅⋅⋅,Mi(Xi)M_i(X_1),···,M_i(X_i)Mi​(X1​),⋅⋅⋅,Mi​(Xi​)
所以到这里为止,复杂度就是O(sn2)O(sn^2)O(sn2)

这里的Mi(X1)M_i(X_1)Mi​(X1​)在论文中没有具体说明,应该是去除第XiX_iXi​条数据建立的模型对X1X_1X1​这条数据的预测值

##############
也就是说,对于s次排列中的每次排列而言,我们建立n个模型MiM_iMi​,每个模型都是去除XiX_iXi​的情况下建立的,对于MiM_iMi​模型而言,我们需要更新前面i个值的预测值,所以整体复杂度约为O(sn2)O(sn^2)O(sn2)

上面的是什么意思呢?
因为CatBoost是类似于GBDT的一种算法,所以也就是说每棵树都是基于上一棵树的残差来建立的.

那么上面的描述是如何解决这个"biased pointwise gradient estimates"的问题呢的?
也就是说,可以修改该问题的描述为:“第i条数据在模型中的梯度如何确立”?
算法大意为:
去掉第i条数据(XiX_iXi​),建立模型MiM_iMi​
对于前面的i-1条数据,依次计算LossLossLoss的梯度gjg_jgj​
把i-1个gjg_jgj​和XjX_jXj​传入函数LearnOneTree建立一棵残差树M
修改最初的MiM_iMi​为Mi+MM_i+MMi​+M
通俗地讲,就是利用前面i-1条数据的情况来预测第i条数据在模型中的对应的预测值.

最后总结下就是:
利用所有训练集(除第i条)建立模型MiM_iMi​,然后使用第1条到第i-1条数据来建一个修正树M,累加到原来模型MiM_iMi​上,以回避上面的"biased pointwise gradient estimates"问题.

好了,最后呢,上面这个算法被进行了修正.我们可以看到,上面这个算法是3重for循环
第二重是i,循环范围是(1,n)
好了,优化办法是每次处理2i2^i2i条数据,所以循环次数变成log2nlog_2nlog2​n次
Mi′(Xj)M_i'(X_j)Mi′​(Xj​)是根据2i2^i2i次条数据进行建模,然后对与XjX_jXj​的预测值
我们需要的Mi′(Xj)M_i'(X_j)Mi′​(Xj​)的数量是∑0≤i≤log2(n)2i+1&lt;4n\sum_{0≤i≤log_2(n)}2^{i+1}&lt;4n∑0≤i≤log2​(n)​2i+1<4n个
所以复杂度变为O(s⋅4n)=O(sn)O(s·4n)=O(sn)O(s⋅4n)=O(sn)

Catboost原文解读相关推荐

  1. 论文原文解读汇总(持续更新中)

    以下是自己对一些论文原文的解读: 机器学习: <XGBoost: A Scalable Tree Boosting System> <CatBoost:gradient boosti ...

  2. 【Transformer开山之作】Attention is all you need原文解读

    Attention Is All You Need Transformer原文解读与细节复现 导读 在Transformer出现以前,深度学习的基础主流模型可分为卷积神经网络CNN.循环神经网络RNN ...

  3. AlexNet原文解读+colab上运行caffe+caffe神经网络可视化(没有完成)

    ##########################下面是资源############################################################## 论文原文链接 ...

  4. Adadelta原文解读

    Adadelta论文原文是: <Adadelta:An adaptive learning rate method> 论文的重点是Section3,我们重点对Section3进行解读 se ...

  5. 《On the Momentum Term in Gradient Descent Learning Algorithm》原文解读

    ############博主前言####################### 我写这篇文章的目的: 想必很多人听过神经网络中的momentum算法, 但是为啥叫momentum(动量)算法呢? 和物 ...

  6. Learning representations by back-propagating errors原文解读

    反向传播的原文是: 1986年的<Learning representations by back-propagating errors> xj=∑iyiwji(1)x_j=\sum_iy ...

  7. LDA主题模型原文解读

    #################LSA和LSI(start)################### 根据wikipedia: https://en.wikipedia.org/wiki/Latent ...

  8. YOLOv2原文解读

    一. 久违的新版本 YOLO 问世已久,不过风头被SSD盖过不少,原作者自然不甘心,YOLO v2 的提出给我们带来了什么呢? 先看一下其在 v1的基础上做了哪些改进,直接引用作者的实验结果了: 条目 ...

  9. 并肩XGBoost、LightGBM,一文理解CatBoost!

    本文主要内容概览: 1. CatBoost简介 CatBoost是俄罗斯的搜索巨头Yandex在2017年开源的机器学习库,是Boosting族算法的一种.CatBoost和XGBoost.Light ...

最新文章

  1. NumPy基础用法总结
  2. Navicat 12连接MySQL8服务器
  3. 在 Jenkins 中使用声明式 Pipeline 构建 Android 项目
  4. python的unittest測试框架的扩展浅谈
  5. python解密md5值_Python之POST提交解密MD5
  6. EOS Dawn 1.0
  7. Python技巧-只用一行代码轻松实现图片文本识别
  8. 行程单图片python预处理_GCC编译过程(预处理-gt;编译-gt;汇编-gt;链接)
  9. 支付宝的商业与技术创新双轮驱动 创造数字时代普惠金融“奇迹”
  10. 大一计算机文化基础上机,计算机文化基础上机试题
  11. 抽象类和接口有哪些共同点和区别
  12. cmake ..是什么意思
  13. bzoj 1010: [HNOI2008]玩具装箱toy
  14. 用javaScript制作星空特效
  15. 计算机网络:网络拓扑分类
  16. 两数求和的c语言程序代码,c语言求和(c语言求和代码)
  17. leetcode 279:完全平方数
  18. 印象笔记html标签删除吗,我用了9年印象笔记,打算彻底放弃,直到……
  19. 【vue】avue-crud配置大全-持续更新
  20. QT Q_OBJECT使用注意事项

热门文章

  1. delphi使用 第三方控件
  2. Flexbox兼容性语法汇总
  3. 以前我们学计算机编程,在编程之前像计算机一样思考
  4. linux ip端口配置文件,Linux /etc/network/interfaces配置接口方法
  5. mysql循环队列_数据结构:循环队列
  6. vue项目封装axios
  7. JavaScript递归算法统计(将整数n分成任意两份不能相同的k份)分法的种数
  8. Redis - Redis command timed out nested exception is io.lettuce.core.RedisCommandTimeoutException
  9. DNN结构构建:NAS网络结构搜索和强化学习、迁移学习
  10. 安卓项目中文件夹的作用