‘Xgboost的那些事儿’

一、决策树

        在聊xgboost之前,先讨论下决策树;因为前者本质上也是一种树类算法,它们以所有叶子节点为预测值,期间通过计算'一些指标'的收益来决定节点分裂方式(树的生长),直到将样本都成小批的分别划分到叶子节点,并且整体上满足一定的‘度量’(loss等)为止。

        决策树(decision tree)的发展路径是非常的丰富的,除了常见的id3,c4.5,cart之外还有c5.0、chaid、多变量决策树等等,但是考虑到这些算法都是相对比较冷门的,个人感觉暂时没有太多的必要深入介绍,所以后续仅介绍我们常见的也是面试常常问到的id3、c4.5和cart。

1.1 那些分裂树的‘指标收益’

        前面讲到树从根节点开始分裂,此时所有节点都被划分在根节点,如果树不做生长那么根节点就是叶子节点,所有节点的预测值就是为根节点指定的值。这相当于所有样本都属于同一个类别(同一预测值);这显然是不合理的,并且当前'模型'loss是非常大的(是的即便只有一个节点那么它也能称做一个模型)。我们知道不管什么算法模型,深度学习也好,强化学习也罢,我们都想进办法追求loss的降低。为了降低loss直观的想法就是要让这个树继续复杂一点(生长下去),为更多的不同叶子节点,分配更多的不同预测值,那么loss自然就会一直降低下去。那么怎么来从根节点开始继续分裂下去呢?(让树生长呢)

        我看很多文章讲到这里就开始谈论息熵啊增益率啊基尼指数啊之类的概念,我个人是比较反对的,因为越是乱入新的概念,越是会让一个新知识的学习变得困难。介绍这些知识是必须的,可是它们是为我们要讨论的问题服务的,永远不要离开我们要讨论的问题本身这个核心(要事第一),在我们彻底弄懂问题前,新知识永远只是配角。知识的本质是世界观,在学习新知识前,我们一定要对它所要解释的‘世界’,有足够的个人认知,才能避免鹦鹉学舌。

        好的,刚才谈到为了降低loss就要让树继续生长下去,树要生长就要分裂,分裂就需要一种规则来保证当前分裂步是最优的(不然就属于贪心算法或随机何异);那么什么样的指标能衡量某个分裂方式的收益呢? 我们称之为[指标A]。还记得么,前面说生长树的目的是为了让整体样本的Loss尽可能的低。 当叶子节点跟样本数一样多时,为叶子结点指定对应样本的值(即按样本ID去生长树),那整体样本loss直接降低为0;但显然这样的模型是严重过拟合并且无意义的。 因此,我们需要尽可能少的叶子节点(简单的树结构)来达到尽可能低的loss。

        假设一个分类任务,类目有10种,样本数10000个,描述样本的属性有50种。最开始只有一个节点,它拥有10000个样本。我们最完美希望用一个只有10个叶子节点的树,让最终样本最终都落入10个叶子节点,而每个叶子节点都是对应的1000个样本。我们知道有点不可能,但是它是指导我们寻找分裂树的思想: 为了最终使用尽可能少的叶子节点预测整个样本集,就需要我们每分裂一次,尽可能的让每个叶子节点里的样本,即多又纯。纯是为了叶子节点以后尽少继续分裂导致增加新叶子节点。多自然是希望每个叶子能多包含一些样本,最终需要的叶子总数更好。

        那么什么样的【指标A】,能够衡量每选择一个分裂方式,能衡量某个叶子节点里样本集是否是满足这种‘又多又纯’的程度呢。好的,这个时候不得不讨论一下信息熵这个玩意了,因为它正好就有这个含义。

式中对数一般取2为底,单位为比特。但是,也可以取其它对数底,采用其它相应的单位,它们间可用换底公式换算。这里的p表示事件的发生概率,注意,以机器学习中的二分类问题为例,这里的概率p表示的就是是否发生的概率。你可以搜到一万篇文章关于介绍对于包含若干分类样本的集合D来讲,Ent(D)的值 跟这个集合‘纯度’的含义关系。(这里不再赘述)。

        反正这里对于一种分裂方式,你只需要计算此种分裂的新生长之后的各叶子节点的纯度(指标A的值),然后从中选择一个最佳的值(最佳收益),将其分裂方式作为最终方案,完成一次树的生长。具体到算法里就是遍历每个特征找到最佳分裂点,生长叶子;然后再递归处理每个叶子;直到达到你希望小的Loss为止。当然为了尽可能少的使用叶子节点,你还会加一些条件(树的深度,最多叶子节点数,每个叶子节点最少样本数等),每当触发了这些条件,数的生长也会提前截止。

 对于那个衡量每次分裂方案的[指标A],如上式被称为信息增益。Ent(D)是分裂之前的值,Σ这项是分裂之后的值,其差值是本次分裂带来的收益。是每个叶子节点根据自身样本数 求一个权值。

到这里我们也介绍完了 ID3算法的核心思想,懂了这些内容点,任何决策树类算法(甚至xgboost)在你面前都是didi,学习来也不难;其它ID3算法的内容不是本文重点不再赘述,网上资源也很多。

 1.2 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值