AI机器学习新手上路-决策树

来源:互联网 发布:cocos2d js protobuf 编辑:程序博客网 时间:2024/05/16 00:44

决策树

通俗讲解:训练出一棵被条件圈定的树。
就像一个人不听的在问“是···吗?” 回答是或者否,则转到下一个问题或者得出结论,直到完成决策。

image

举个栗子:银行一个20w贷款的放贷依据假定有三:婚姻状况(未婚、已婚),工资水平(1w以下,1-3w,3w以上),身体状况(好,一般,差)。决策树就像在问贷款者:你是否结婚了?工资多少?。。。

而决策树所问的第一个问题,不难理解,应该是最重要最能影响这个决策、最具有类别特征的问题,因为回答者的回答将可能直接决定分类的类别。那么问题来了:怎么在众多类别特征中决定“问问题”的顺序,问完问题以后怎么决定接下来的安排?

我们需要先了解一个概念信息熵

信息熵的定义是:如果一个事件有n种可能,每一种可能发生的概率是pi,则其信息熵为

H(X)=plog1p

你可以验证一下:如果某件事发生的概率是1,则其信息熵为0,意思就是说了跟没说一样;如果这件事发生的概率无穷小,比如“中国队拿了世界杯冠军”,那么它的信息熵趋于无穷,你听到这个消息的时候心里就会有无数个“震惊”。


举例说明:生成决策树判断银行是否放贷(ID3算法)

婚姻状况 工资水平 身体状况 放贷 未婚 1 好 是 未婚 1 差 否 未婚 3 差 是 已婚 3 一般 是 未婚 3 好 是 未婚 2 好 是 未婚 2 一般 否 未婚 1 好 否 已婚 1 一般 是
step1:计算整个分类系统-放贷的信息熵

根据历史数据,放贷有两种可能:放的概率为2/3;不放的概率为1/3,根据信息熵公式:

H(S)=plog1p=13log1323log230.92

step2:计算假定按照每一个特征划分后的信息熵

按照工资状况划分后:

工资水平 放贷 1 是 否 否 是 2 是 否 3 是 是 是

划分后,各部分的信息熵

H(S1|T)=12log1212log12=1

H(S2|T)=12log1212log12=1

H(S3|T)=33log3303log03=0

划分后的条件熵为
H(S|T)=491+291+390=23

最终得到特征属性带来的信息增益为

H(S)H(S|T)0.25

信息增益,通俗的讲就是该特征为整件事带来的信息增量,比如中国队打进世界杯了,信息熵很大;但是前提条件如果加上了c罗和梅西加入中国国籍带队参赛,那么打进世界杯的就不那么令人意外了,加上该条件后的信息熵前后对比,就凸显出该特征带来的信息增益。

以此计算出其他两个特征带来的信息增益,得到特性【工资水平】带来的信息增益最大,选择其作为决策树的首个分支条件。后面的步骤就是重复上述。

通过信息增益量化一次拆分的结果好坏,下一步就是构造决策树,主要步骤如下:

  1. 遍历每个决策条件,对结果集进行拆分
  2. 计算该决策条件下,所有可能的拆分情况的信息增益,信息增益最大的拆分为本次最优拆分
  3. 递归执行1、2两步,直至信息增益=0或者很小

在决策树的每一个非叶子结点划分之前,先计算每一个属性所带来的信息增益,选择最大信息增益的属性来划分,因为信息增益越大,区分样本的能力就越强,越具有代表性,很显然这是一种自顶向下的贪心策略。以上就是ID3算法的核心思想。


决策树的剪枝:
实际的训练集训练出来的数据会存在过拟合现象,本着奥卡姆剃刀原理的原则,那么就需要进行剪枝处理处理。
剪枝的做法可以有
1. 预剪枝:一边决策一边剪枝,判断最大信息增益都小于阈值的时候直接变为叶子节点
2. 后剪枝:决策后进行剪枝,判断合并后信息的增加量是否小于阈值。后剪枝是目前最普遍的做法。

决策树在生成过程中运用信息熵在贪婪算法思想下建立(局部生成);
决策树在剪枝过程中则运用错误(率)来指导剪枝(全局剪枝)。


参考资料:
http://www.jianshu.com/p/6eecdeee5012

原创粉丝点击