28-决策树算法——简单有效的概率模型 - LoveAI - 博客园
白天太阳升起,总是给人希望,无尽的黑夜往往让人无助。鲁迅说:黑暗中的一点光亮给人以温暖,然而正因为光亮之有限,反衬出周围更加广袤的黑暗,又带给人新的绝望。生活总在希望和失望之间交错前行,当黑暗来临时,我们或许可如萤火般,在黑暗里发一点光,而不必等候炬火(天气越冷,鸡汤越暖,你懂的)。
今天学习机器学习算法中的决策树,是一种简单高效并且具有强解释性的模型,广泛应用于数据分析领域。其本质是一颗由多个判断节点组成的树,如:
决策树经过训练之后,看起来像是以树状形式排列的一系列if-then语句。一旦我们有了决策树,只要沿着树的路径一直向下,正确回答每一个问题,最终就会得到答案。沿着最终的叶节点向上回溯,就会得到一个有关最终分类结果的推理过程。
决策树由一个个判断节点组成,每经过一个判断节点数据就会被拆分一次。那么如何选择最合适的拆分条件呢?我们需要量化指标来进行评价,在决策树算法中,通过基尼不纯度或者熵来对一个(拆分后的)集合进行的有序程度进行量化,然后引入信息增益概念对一次拆分进行量化评价。
定义:将来自集合的某种结果随机应用于某一数据项的预期误差率。
直观解释是一个随机事件变成它的对立事件的概率。
例如 一个随机事件X ,P(X=0) = 0.5 ,P(X=1)=0.5
那么基尼不纯度就为 P(X=0)*(1 - P(X=0)) + P(X=1)*(1 - P(X=1)) = 0.5
一个随机事件Y ,P(Y=0) = 0.1 ,P(Y=1)=0.9
那么基尼不纯度就为P(Y=0)*(1 - P(Y=0)) + P(Y=1)*(1 - P(Y=1)) = 0.18
很明显 X比Y更混乱,因为两个都为0.5 很难判断哪个发生。而Y就确定得多,Y=1发生的概率很大。而基尼不纯度也就越小。
所以基尼不纯度也可以作为衡量系统混乱程度的标准。
Gini impurity公式:
(其中fi表示事件i/分类i发生的概率)
熵是信息论中的概念,用来表示集合的无序程度,熵越大表示集合越混乱,反之则表示集合越有序。熵的计算公式为:
比如投了4次硬币,2次正面,2次反面。根据香农公式那么熵就为E=-1/2log2(1/2)-1/2log2(1/2)=1。同理如果每次都是正面的话,那么熵为0。
信息论熵的概念在吴军的《数学之美》中有很好的解释:
我们来看一个例子,马上要举行世界杯赛了。大家都很关心谁会是冠军。假如我错过了看世界杯,赛后我问一个知道比赛结果的观 众“哪支球队是冠军”? 他不愿意直接告诉我, 而要让我猜,并且我每猜一次,他要收一元钱才肯告诉我是否猜对了,那么我需要付给他多少钱才能知道谁是冠军呢? 我可以把球队编上号,从 1 到 32, 然后提问: “冠军的球队在 1-16 号中吗?” 假如他告诉我猜对了, 我会接着问: “冠军在 1-8 号中吗?” 假如他告诉我猜错了, 我自然知道冠军队在 9-16 中。 这样只需要五次, 我就能知道哪支球队是冠军。所以,谁是世界杯冠军这条消息的信息量只值五块钱。 当然,香农不是用钱,而是用 “比特”(bit)这个概念来度量信息量。 一个比特是一位二进制数,计算机中的一个字节是八个比特。在上面的例子中,这条消息的信息量是五比特。(如果有朝一日有六十四个队进入决赛阶段的比赛,那 么“谁世界杯冠军”的信息量就是六比特,因为我们要多猜一次。) 读者可能已经发现, 信息量的比特数和所有可能情况的对数函数 log 有关。 (log32=5, log64=6。) 有些读者此时可能会发现我们实际上可能不需要猜五次就能猜出谁是冠军,因为象巴西、德国、意 大利这样的球队得冠军的可能性比日本、美国、韩国等队大的多。因此,我们第一次猜测时不需要把 32 个球队等分成两个组,而可以把少数几个最可能的球队分成一组,把其它队分成另一组。然后我们猜冠军球队是否在那几只热门队中。我们重复这样的过程,根据夺 冠概率对剩下的候选球队分组,直到找到冠军队。这样,我们也许三次或四次就猜出结果。因此,当每个球队夺冠的可能性(概率)不等时,“谁世界杯冠军”的信 息量的信息量比五比特少。香农指出,它的准确信息量应该是
= -(p1*log p1 + p2 * log p2 + ... +p32 *log p32), 其 中,p1,p2 , ...,p32 分别是这 32 个球队夺冠的概率。香农把它称为“信息熵” (Entropy),一般用符号 H 表示,单位是比特。有兴趣的读者可以推算一下当 32 个球队夺冠概率相同时,对应的信息熵等于五比特。
信息增益是用来选取分类属性的。被选择的分类属性,信息增益是最高的。
信息增益的方法会偏向于选择将样本分为多类的属性,而这个属性对于机器学习可能是没有意义的。 因此有时也用信息增益率的方式来选取特征。
比如对于特征A的信息增益有以下公式:
(Info为熵或基尼不纯度)
举例说明:选取特征把以下数据分类。应该如何选取特征呢?
有性别和年龄两个特征(先不计观点序号),选取哪一个作为分类特征呢?
首先通过信息增益的计算来进行选取。
1)如果选取性别作为特征,那么
2)以年龄为特征,则
因此选性别作为分类特征。
但是这种选取有一个问题,假如我们增加了一个观点序号的特征,那个这个特征可以将数据分为4类。则Gain("Opinionno")=1.5 在这种情况下观点序号就被选作了特征,显然是不合理的。
用信息增益率来解决以上问题,这个方法很简单直接,就是对分类太多的特征进行一定的惩罚。 有以下公式 :
其中为属性A的内部信息(Intrinsic Information of an Attribute)。实际上就是集合D关于属性A的各取值的熵。
因此在第一次迭代中选取性别作为特征。
我们已经可以通过信息增益量化一次拆分的结果好坏,下一步就是构造决策树,主要步骤如下:
1、遍历每个决策条件(如:拥有房产、已婚),对结果集进行拆分;
2、计算该决策条件下,所有可能的拆分情况的信息增益,信息增益最大的拆分为本次最优拆分;
3、递归执行1、2两步,直至信息增益<=0。
执行完上述步骤后,就构造出了一颗决策树,如图:
下周学习如何在sklearn中使用决策树,敬请期待:)