结合B站UP主:致敬大神的讲解和自己的理解作此文章以便自己日后的复习
比如:以买榴莲举例,没任何信息的情况下买榴莲,50%挑到好的,50%挑到坏的,但是如果我们闻了一下后发现味道很香,那么这时,这个被我们闻过的榴莲是好榴莲的几率就上升了
解释:未得到信息之前一道选择题有A、B、C、D四个选项,那么这时的熵是 l o g 2 4 = 2 log_2^4=2 log24=2。现在我得到了一条信息说:选项C有一半的几率是正确的,言外之意就是A、B、D三个选项也有 1 2 \frac{1}{2} 21概率是正确的。那么此时A,B,D选项的单独正确概率则为 1 2 / 3 = 1 6 \frac{1}{2}/3=\frac{1}{6} 21/3=61,那么这时的熵为:
1 6 ⋅ l o g 2 6 ( 选 项 A ) + 1 6 ⋅ l o g 2 6 ( 选 项 B ) + 1 2 ⋅ l o g 2 2 ( 选 项 C ) + 1 6 ⋅ l o g 2 6 ( 选 项 D ) = 1.79 \frac{1}{6}·log_2^6(选项A)+\frac{1}{6}·log_2^6(选项B)+\frac{1}{2}·log_2^2(选项C)+\frac{1}{6}·log_2^6(选项D)=1.79 61⋅log26(选项A)+61⋅log26(选项B)+21⋅log22(选项C)+61⋅log26(选项D)=1.79
意思就是说当我们知道C有一半概率正确之后,熵从2减少到了1.79,那么这个信息提供的信息量就是0.21bit
数据集有 17 17 17 条
标签为好瓜的有 8 8 8 条
标签为坏瓜的有 9 9 9 条
因此: 好瓜占 8 17 \frac{8}{17} 178, 坏瓜占 9 17 \frac{9}{17} 179
得:
E n t ( D ) = 8 17 ⋅ l o g 2 17 8 + 9 17 ⋅ l o g 2 17 9 = 0.5117 + 0.4858 = 0.998 Ent(D)=\frac{8}{17}·log_2^\frac{17}{8}+\frac{9}{17}·log_2^\frac{17}{9}=0.5117+0.4858=0.998 Ent(D)=178⋅log2817+179⋅log2917=0.5117+0.4858=0.998
------令:
D 1 { 色 泽 = 青 绿 } D_1\{色泽=青绿\} D1{色泽=青绿}, D 2 { 色 泽 = 乌 黑 } D_2\{色泽=乌黑\} D2{色泽=乌黑}, D 3 色 泽 = 浅 白 D_3{色泽=浅白} D3色泽=浅白
------则
E n t ( D 1 ) = − ∑ k = 1 2 P k l o g 2 P k = − ( 3 6 ⋅ l o g 2 3 6 + 3 6 ⋅ l o g 2 3 6 ) = 1 Ent(D_1)=-\sum_{k=1}^{2}P_klog_2{P_k}=-(\frac{3}{6}·log_2^\frac{3}{6}+\frac{3}{6}·log_2^\frac{3}{6})=1 Ent(D1)=−∑k=12Pklog2Pk=−(63⋅log263+63⋅log263)=1
E n t ( D 2 ) = − ∑ k = 1 2 P k l o g 2 P k = 4 6 ⋅ l o g 2 6 4 + 2 6 ⋅ l o g 2 6 2 = 0.92 Ent(D_2)=-\sum_{k=1}^{2}P_klog_2{P_k}=\frac{4}{6}·log_2^\frac{6}{4}+\frac{2}{6}·log_2^{\frac{6}{2}}=0.92 Ent(D2)=−∑k=12Pklog2Pk=64⋅log246+62⋅log226=0.92
E n t ( D 3 ) = 1 5 ⋅ l o g 2 5 + 4 5 ⋅ l o g 2 5 4 = 0.72 Ent(D_3)=\frac{1}{5}·log_2^{5}+\frac{4}{5}·log_2^{\frac{5}{4}}=0.72 Ent(D3)=51⋅log25+54⋅log245=0.72
------所以
G a i n ( D , 色 泽 ) = 0.998 − 6 17 ⋅ 1 − 6 17 ⋅ 0.92 + 5 17 ⋅ 0.72 = 0.1106 Gain(D,色泽)=0.998-\frac{6}{17}·1-\frac{6}{17}·0.92+\frac{5}{17}·0.72=0.1106 Gain(D,色泽)=0.998−176⋅1−176⋅0.92+175⋅0.72=0.1106
根据原来的17条数据集挑选出纹理是清晰的所有数据,共有9条数据。
这时的 E n t ( D ) = 2 9 ⋅ l o g 2 9 2 + 7 9 ⋅ l o g 2 9 7 = 0.7642 Ent(D)=\frac{2}{9}·log_2^{\frac{9}{2}}+\frac{7}{9}·log_2^{\frac{9}{7}}=0.7642 Ent(D)=92⋅log229+97⋅log279=0.7642
然后↓
因为信息增益对可取值数目较多的属性有所偏好,所以需要用增益率(gain ratio)来选择最优划分属性。
1.什么是较多的属性
比如色泽可取青绿、乌黑、浅白等等属性,某个特征的属性的数目越多,对信息增益就影响越大
以之前17条的数据集和特征 色泽 为例
因为 色泽 有 三个 属性,所以色泽的 V = 3 V=3 V=3,那 I V ( 色 泽 ) = 1.580 IV(色泽)=1.580 IV(色泽)=1.580是怎么样得到的呢?如下所示
对于色泽的第一个属性:青绿来说, ∣ D v ∣ |D^v| ∣Dv∣就是6, ∣ D ∣ |D| ∣D∣就是17,对于 乌黑 来说 ∣ D v ∣ |D^v| ∣Dv∣也是6, ∣ D ∣ |D| ∣D∣也是17, 对于浅白 来说, ∣ D v ∣ |D^v| ∣Dv∣是5, ∣ D ∣ |D| ∣D∣还是17。因此 ∣ D v ∣ ∣ D ∣ \frac{|D^v|}{|D|} ∣D∣∣Dv∣的意思就是某个属性的个数在数据集 D D D中的占比
因此,对于 色泽 来说,其
I V ( 色 泽 ) = − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ l o g 2 ∣ D v ∣ ∣ D ∣ = − ( 6 17 ⋅ l o g 2 6 17 + 6 17 ⋅ l o g 2 6 17 + 5 17 ⋅ l o g 2 5 17 ) = 0.530 ( 青 绿 ) + 0.530 ( 乌 黑 ) + 0.519 ( 浅 白 ) = 1.579 IV(色泽)=-\sum_{v=1}^{V}\frac{|D^v|}{|D|}log_2^{\frac{|D^v|}{|D|}}=-(\frac{6}{17}·log_2^{\frac{6}{17}}+\frac{6}{17}·log_2^{\frac{6}{17}}+\frac{5}{17}·log_2^{\frac{5}{17}})=0.530(青绿)+0.530(乌黑)+0.519(浅白)=1.579 IV(色泽)=−∑v=1V∣D∣∣Dv∣log2∣D∣∣Dv∣=−(176⋅log2176+176⋅log2176+175⋅log2175)=0.530(青绿)+0.530(乌黑)+0.519(浅白)=1.579
G a i n r a t i o ( D , 色 泽 ) = G a i n ( D , 色 泽 ) I V ( 色 泽 ) = 0.1106 1.579 = 0.07 Gain_ratio(D,色泽)=\frac{Gain(D,色泽)}{IV(色泽)}=\frac{0.1106}{1.579}=0.07 Gainratio(D,色泽)=IV(色泽)Gain(D,色泽)=1.5790.1106=0.07
其他特征同理
其使用方法并非简单的找出最高的增益率,而是
[Quinlan,1993]:先从候选划分属性(特征)中找出信息增益高于平均水平的属性(特征),再从中选择增益率最高的
意思就是,先算出所有属性的信息增益,然后选出高于平均水平的几个属性,然后再求这几个出挑的属性的增益率,然后选最高的那个属性最为最优划分属性
这里以StatQuest所讲的例子为例
这里有三个特征Chest Pain, Good Blood Circulation和Blocked Arteries. 对于每一个特征,计算这个特征YES/NO时,心脏病的判定是YES还是NO,举个例子,如下
对于胸痛这个特征,第一条数据是NO,其对应的心脏病预测为NO,所以右边绿色框里的NO的数量+1,第二条数据是YES,其对应的心脏病预测结果为YES,所以左边绿色框里的YES数量+1。遇到丢失的数据则直接跳过,比如在计算动脉阻塞的第4条数据时,应该跳过。
注意:可能每个特征的计数总和并非一致,比如胸痛特征,其总计为 105 + 39 + 34 + 125 = 303 105+39+34+125=303 105+39+34+125=303,良好血液循环特征的总计为297,动脉阻塞特征的总计为297。 每个特征的总计不一样的原因是有些病人测了这一项但有些病人可能没有。
对于上图左边的那个绿色框(视频中也叫叶子),其Gini指数计算如上图过程所示(其原理就是求概率,从左边绿色的叶子中随意拿两个数据,并放回,求其不相等的概率)
右边的绿色叶子的Gini指数同理可得为0.336
由于左边叶子和右边叶子的数量不一样,我们不能直接把两个相加再除以2来获取这个特征的总基尼指数,我们应该用加权平均去计算胸痛这一特征的总基尼指数,过程如下
解释:144是左边绿色叶子的总和,159是右边绿色叶子的总和,最后得到胸痛特征的总基尼指数为0.364,同理可得血液循环的总基尼指数为0,360, 动脉阻塞的基尼指数为0.381。由于血液循环的总基尼指数最小,因此拿它来判别病人有没有心脏病是最恰当的
当我们用血液循环来把病人分为两类时,我们应该保留绿色的左叶子和右叶子(因为每片叶混合了有心脏病和没心脏病的病人)。换句话说,上图中,左上的那个二叉树的左叶子(YES:37,NO:127)变成了右下的这棵树的根节点的左子节点(即37/127),对应的右叶子变成了右子节点
在164(37+127)个病人所组成的数据集中,在用上述讲的方法对其求其余两个特征的总基尼指数,求得动脉阻塞的基尼指数=0.29,胸痛=0.3更小,但是我们还要求一下37/137这个节点的基尼指数=0.35,由于其余两个特征的基尼指数都比0.35小,其意味着再分叉会让基尼指数下降,所以应该再次分叉且取这两个特征中最小基尼指数的特征,所以37/127这个子节点用特征Blocked Arteries代替,如下图所示:
如果用胸痛特征替代13/102这个节点的话得到的总基尼指数比替代前的要大(0.29>0.2)因此不用再分,这是作者想表达的意思,但是实际上作者在这一步算错了,分了之后的基尼指数为0.19而并非0.29,所以应该再分,但是作者想表达的意思就是如果分了之后的基尼指数大于分叉之前的话就不应该分【0.19得到的过程是:对于上图的Chest Pain的左叶子,得到该叶子的基尼指数为 1 − ( 7 7 + 26 ) 2 − ( 26 7 + 26 ) 2 = 0.334 1-(\frac{7}{7+26})^2-(\frac{26}{7+26})^2=0.334 1−(7+267)2−(7+2626)2=0.334,同理得右边叶子的基尼指数为 1 − ( 6 76 + 6 ) 2 − ( 76 76 + 6 ) 2 = 0.136 1-(\frac{6}{76+6})^2-(\frac{76}{76+6})^2=0.136 1−(76+66)2−(76+676)2=0.136,那么这个特征的总基尼指数为 ( 7 + 26 7 + 26 + 6 + 76 ) ⋅ 0.334 + ( 6 + 76 7 + 26 + 76 + 6 ) ⋅ 0.136 = 0.19 (\frac{7+26}{7+26+6+76})·0.334+(\frac{6+76}{7+26+76+6})·0.136=0.19 (7+26+6+767+26)⋅0.334+(7+26+76+66+76)⋅0.136=0.19】
其他节点算法一样