8-决策树-分类-监督方法

决策树的历史

    Quinlan 1986年提出ID3算法,1993年提出C4.5算法,Breiman等1984年提出CART算法。

ID3算法
    现在我们手上有n个实例,每个实例都有m个特征,共属于k个类别。举例说,有100个人,抽取其3个特征X=(样貌,性格,学历),从是否作奸犯科来分类,共属2个类别Y = (犯法 | 不犯法)。现在新来一个人,我们想要判断他属于哪个类别,是否会犯法。
    某种程度上,类别也是特征,可以看成第n+1个特征。我们可以将100个人的特征向量扩大到4个( 样貌,性格,学历,犯法否)。这四个特征里面,我们明显关心的是“犯法否"这个特征。但对于新来的人,我们只有他剩余的3个特征(样貌,性格,学历),并没有他第四个特征。我们这个时候就想,是否能通过已有的特征值来推测未知的特征值呢?也就是,(样貌,性格,学历)跟 (犯法否) 是否存在联系?如果不存在,则我们是无法判断的。也许我们只能抛硬币来瞎猜。如果存在,则我们就要去找出它们的联系。
那决策树又是怎么找出前n个特征和第n+1个特征(也就是类别)的联系呢?
    假设我们手上现在有100个人的数据,如下表所示
特征取值守法犯法
样貌尖耳猴腮30个占比10%占比90%
 满脸祥和70个占比90%占比10%
性格凶残20个占比30%占比70%
 温和80个占比70%占比30%
学历低15个占比40%占比60%
 高85个占比60%占比40%
     对于那100个人,我们观察可能会发现以下的现象,尖耳猴腮里面有9成会作奸犯科,而满脸祥和里面有9成奉公守法,样貌这个特征比所有其他特征对某人守法或犯法的区分度都要大,也就是集中度非常高。这样,如果新来一个人,我们就自然而然地,先关注他的样貌,而不是它的其他特征(比如学历)。如果他是尖耳猴腮,我们就把他纳入尖耳猴腮的那拨人范围内进一步考察,如果他是满脸祥和,我们就把他纳入满脸祥和那批人去进一步考察。
    这是我们下意识的一种思考路径。但有一个问题,我们是如何感觉到样貌这个特征对类别的区分度非常好的呢?这样的感觉到底靠不靠谱?如果我们一定要将这种感觉一缕一缕地剥开来,会发现,有个概念跟这种感觉是殊途同归的,这就是“信息熵”(简称熵),它源自香农。

     据说香农研究出了信息的量化度量方法后需要起个名字。没错,香农就是那个信息论和香农定理的创始人——克劳德·香农(注:香农一生的最大贡献主要有两个:一个是信息理论、信息熵的概念,另一个是符号逻辑和开关理论,这些理论为信息论和数字通信奠定了基础)。另一位大牛人,作为现代计算机和博弈论重要创始人的冯·诺依曼,给香农出了个馊主意,因为没有人真的了解熵是什么,可以把信息的量化度量方法命名为信息熵,这样就可以轻松驳回各方争议。香农欣然采纳了诺依曼的建议。【https://xueqiu.com/8107212038/77454910】

    信息熵(information entropy)是用来度量随机变量的不确定性的,它的公式是H(X)=∑pi(-logpi) ,i=1,2,…,n , pi代表x取第i个值时的概率,假设x总共取n个值。这种不确定性是指什么呢? 统计学中另外一个概念“方差”用来度量随机变量的变异程度。那么不确定性跟变异程度有什么区别?
     方差中的变异程度是用每个x值离中心值(平均值)的距离来度量的,每个点离中心值越近,变异程度越小;每个点离中心点越远,变异程度越大。 而熵里面没有中心值这个概念,熵的大小甚至跟x的取值无关,但它跟x总共取了多少个值有关跟x取某个值时的概率也有关。 我们可以列个表格观察,假设随机变量X有5个取值(x1,x2,x3,x4,x5),P为其对应的概率,共列出四中可能的概率取值情况。
Xx1x2x3x4x5概率总和
情况一0.90.10001
情况二0.90.050.05001
情况三0.50.50001
情况四0.20.20.20.20.21
 p1(-logp1)p2(-logp2)p3(-logp3)p4(-logp4)p5(-logp5)总熵
情况一0.09 0.23 0000.33 
情况二0.09 0.15 0.15 000.39 
情况三0.35 0.35 0000.69 
情况四0.32 0.32 0.32 0.32 0.32 1.61 
由以上表格,我们可以得出结论
1)随机变量X的取值种类越多,不确定性越大。
2)X取值种类相同时,每种x值的概率越平均,不确定性越大;而某个x值的概率越大,不确定性越小。
3)可以看到,熵所衡量的其实是随机变量X的集中程度,X越集中,其熵越小,X越分散,其熵越大。但 熵的集中和方差中的集中有所不同。方差中越是集中在平均值周围的方差越小。而熵中,只要集中,无论集中于哪个值,越集中熵就越小。

    清楚了我们可以用信息熵来支撑我们的感觉,作为量化感觉的依据,那我们可以基于熵来继续讨论本例。
     在100个人中,随机变量是第n+1个特征,也就是类别(犯法|守法)。类别的熵,假设计算出来是E100,意义是什么?它的意义是能衡量类别的集中程度,是否集中于某一个类别?还是分散在每个类别中。当然是集中程度越高越好,最高的集中程度就是100个全是坏人,那么如果新来一个人,我们就可以直接判断它会犯法了。而如果集中程度不高,比如50个人守法,50个人犯法,那么对于新来的人,我们想要判断它会犯法还是守法,就不那么容易。
     而当我们对这100个人,根据特征“样貌”进行划分的时候,我们可以得到两拨人,“尖耳猴腮”一拨30人和“满脸祥和”一拨70人。“尖耳猴腮”这拨人也有守法和犯法之分,我们求出其类别的熵,假设熵是E30_Y;同理对满脸祥和这一拨求类别的熵,假设熵是E70_Y。 再根据两拨人的权重不同,加以权重,就可以得到总熵 E100_Y = 30% *  E30_Y + 70% * E70_Y。这个结果有什么意义呢?其意义就是,如果我们根据样貌进行划分的话,分成两拨人后,这100个人守法的集中度,或者说犯法的集中度有多高。因此,我们的感觉背后,其实是E100_Y在支撑,E100_Y越小,其集中度就越高,我们就感觉关注“样貌”这个特征。
     当我们用E100减去E100_Y后,得到的结果记为Gain(100个人,样貌),即Gain(100个人,样貌) = E100 - E100_Y,这个就是信息增益。这数字有什么意义呢?它代表,由于我们用特征“样貌”去划分这总体100人,而得到的类别的集中度相对于没有进行划分之前的提升。当E100_Y越小,代表按样貌划分后,类别的集中度越高,而这时Gain(100个人,样貌)是越大的。换言之,当Gain(100个人,样貌)越大的时候,代表按特征“样貌”划分而带来的集中度提高效果越好。
    因此,我们可以分别计算按每个特征来划分这100人,在比较它们的 Gain值,然后选择能够使Gain最大的特征来划分这100人,这样能带来的集中程度的提高越大。
    比如我们按样貌划分了两拨人,“尖嘴猴腮”一拨,“满脸祥和”另外一拨。对于每一拨人,我们同样可以计算每个特征(特征样貌除外)下的Gain值,再选择能够使Gain值最大的特征来继续划分。这样一直划分到再也没有特征可以划分为止。我们就可以画出一个树,这棵树叫“ 决策树” 。如果来一个新的人,我们可以按照决策树来进行判断,最后能找到它最有可能出现在哪个类别上面。

C4.5算法
    由ID3算法可以看出,当我们将这100个人按照某个特征A划分后,如果特征A有m个值,那么我们会得到m拨人,进一步我们会计算每一拨人的熵,再将m拨人的熵按其占总体的比例为权重加总,得到的总熵。它能衡量按特征A划分得到的集中程度。总熵越小,由该特征划分带来的集中度提高约大(Gain值越大),划分后的结果就越集中。
    现在问题是,当特征A有非常多值,假设有100个值,那么我们按A划分会得到100拨人,每一拨只有1个人,要么守法,要么犯法,集中程度非常高,都达到100%了。我们可以计算每一拨人的熵,pi * (-logpi) = 100% * (-log100%) = 0,100拨人的总熵也是0。那么根据ID3的规则,我们会选择总熵最小的特征来进行划分,因为这样得到的集中程度最高。
    但是,这在实际应用中没有任何意义。这样的话,每拨人都只有一个人,决策树就无法再往下划分。决策树无法再往下划分,其他特征也派不上用场,分类的结果变得不可靠。
    所以,我们从这个极端的例子可以感受到,ID3算法会倾向于选择属性值多的特征来进行划分,而那样的分类效果不见得好。为了克服这个倾向,我们可以对ID3进行改进。改进的思路就是:设计一个指标,Gain值越大,该指标越大;但属性值越多或者属性值越分散,该指标越小。
    事实上,我们仍然可以利用已有的公式H(X)=∑pi(-logpi),这次pi的意义不再是不同类别在某一拨人中的比例,而是每一拨人在总人数中的占比,也就是每一拨人的权重。回顾当我们在计算按样貌特征来划分的总熵时,E100_Y = 30% * E30_Y + 70% * E70_Y中 30%,70%就是“尖耳猴腮”和“满脸祥和”的各自权重。
    现在我们要设计出一个概念,“分裂信息(Split Information)” == ∑pi(-logpi),pi为按每一拨人的权重。 当我们按样貌特征来划分时,可以计算分裂信息, S = 30% * (-log30%) + 70 * (-log70%)。可以预期到,当属性值越多或越分散时,S是越大的。
    由改进思路,我们可以看到,目标指标 是Gain值的增函数,是S的减函数,因此,我们可以这样设计, 目标指标 = Gain 值 / S
这个目标指标就是增益率(Gain_ratio)【这里的Gain_ratio是按周志华的版本来阐述的,但李航的版本并不是这样,它的S是根据类别的熵来计算的,并不是根据某个特征值的属性值权重来计算的,有人发现这点么?或者我错了?】

CART算法
待补充
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值