监督学习 | ID3 决策树原理及Python实现
文章目錄
- 1. 信息熵 Information Entropy
- 1.1 信息熵公式推導(dǎo)
- 2. 信息增益 Information Gain
- 2.1 信息增益最大化
- 2.1.1 利用離散特征進(jìn)行分類
- 2.1.2 利用連續(xù)特征進(jìn)行分類
- 2.1.2.1 二分法
- 2.1.2.2 信息熵、信息增益及二分法的Python實(shí)現(xiàn)
- 參考資料
相關(guān)文章:
機(jī)器學(xué)習(xí) | 目錄
監(jiān)督學(xué)習(xí) | ID3 決策樹原理及Python實(shí)現(xiàn)
監(jiān)督學(xué)習(xí) | ID3 & C4.5 決策樹原理
監(jiān)督學(xué)習(xí) | CART 分類回歸樹原理
監(jiān)督學(xué)習(xí) | 決策樹之Sklearn實(shí)現(xiàn)
監(jiān)督學(xué)習(xí) | 決策樹之網(wǎng)絡(luò)搜索
1. 信息熵 Information Entropy
信息是個(gè)很抽象的概念。人們常常說信息很多,或者信息較少,但卻很難說清楚信息到底有多少。比如一本五十萬字的中文書到底有多少信息量。直到1948年,香農(nóng)提出了“信息熵”的概念,才解決了對信息的量化度量問題。
信息熵這個(gè)詞是香農(nóng)從熱力學(xué)中借用過來的。熱力學(xué)中的熱熵是表示分子狀態(tài)混亂程度的物理量。香農(nóng)用信息熵的概念來描述不確定性。
- 隨機(jī)變量xxx的信息熵計(jì)算公式:H(x)=?∑i=1nP(xi)log2(Pi)H(x)= -\sum_{i=1}^nP(x_i)log_2(P_i)H(x)=?∑i=1n?P(xi?)log2?(Pi?)
- 信息熵越大,則表示不確定性越高。
- 在文本中,當(dāng)不同的詞匯越多時(shí),其信息熵越大,直觀上來說就是所包含的信息越多
熵:在物理的熱力學(xué)中,用熵來表示分子狀態(tài)混亂程度。當(dāng)一個(gè)物體溫度越高時(shí),其內(nèi)部粒子活動(dòng)越劇烈,也越混亂。因此混亂程度越高,熵越大。
1.1 信息熵公式推導(dǎo)
P(xi)=P(x1)×P(x2)×...×P(xn)(1)P(x_i)=P(x_1)\times P(x_2) \times...\times P(x_n)\tag{1}P(xi?)=P(x1?)×P(x2?)×...×P(xn?)(1)
I(xi)=log2(1P(xi))=?log2(P(xi))(2)I(x_i)=log_2(\frac{1}{P(x_i)})=-log_2(P(x_i))\tag{2}I(xi?)=log2?(P(xi?)1?)=?log2?(P(xi?))(2)
H(x)=E[I(xi)]=?E[log2(P(xi))]=?∑i=1nP(xi)log2(Pi)(3)H(x)=E[I(x_i)]=-E[log_2(P(x_i))]= -\sum_{i=1}^nP(x_i)log_2(P_i)\tag{3}H(x)=E[I(xi?)]=?E[log2?(P(xi?))]=?i=1∑n?P(xi?)log2?(Pi?)(3)
對于樣本集合DDD來說,隨機(jī)變量xxx是樣本的類別,即假設(shè)樣本有kkk個(gè)類別,樣本總數(shù)為DDD,則類別iii的概率是ciD\frac{c_i}{D}Dci??。
因此樣本集合DDD的經(jīng)驗(yàn)熵為:
H(D)=?∑i=1k∣ci∣∣D∣log2(∣ci∣∣D∣)(4)H(D)=-\sum_{i=1}^k \frac{|c_i|}{|D|}log_2(\frac{|c_i|}{|D|}) \tag{4}H(D)=?i=1∑k?∣D∣∣ci?∣?log2?(∣D∣∣ci?∣?)(4)
例1:假設(shè)有四個(gè)球,從中隨機(jī)放回地抽出四個(gè)球,下面計(jì)算各個(gè)事件的信息熵:
1.紅紅紅紅,則事件xxx的信息熵:
H(x)=?∑i=14P(xi)log2(Pi)=[1×log2(1)+1×log2(1)+1×log2(1)+1×log2(1)]=0H(x)=-\sum_{i=1}^4P(x_i)log_2(P_i) =[1 \times log_2(1)+1 \times log_2(1)+1 \times log_2(1)+1 \times log_2(1)]=0H(x)=?∑i=14?P(xi?)log2?(Pi?)=[1×log2?(1)+1×log2?(1)+1×log2?(1)+1×log2?(1)]=0
2.紅紅紅藍(lán),則事件yyy的信息熵:
H(y)=?∑i=14P(yi)log2(Pi)=[0.75×log2(0.75)+0.75×log2(0.75)+0.75×log2(0.75)+0.25×log2(0.25)]=1.4338H(y)=-\sum_{i=1}^4P(y_i)log_2(P_i) =[0.75 \times log_2(0.75)+0.75 \times log_2(0.75)+0.75 \times log_2(0.75)+0.25 \times log_2(0.25)]=1.4338H(y)=?∑i=14?P(yi?)log2?(Pi?)=[0.75×log2?(0.75)+0.75×log2?(0.75)+0.75×log2?(0.75)+0.25×log2?(0.25)]=1.4338
3.紅紅藍(lán)藍(lán),則事件zzz的信息熵:
H(z)=?∑i=14P(zi)log2(Pi)=[0.5×log2(0.5)+0.5×log2(0.5)+0.5×log2(0.5)+0.5×log2(0.5)]=2H(z)=-\sum_{i=1}^4P(z_i)log_2(P_i) =[0.5 \times log_2(0.5)+0.5 \times log_2(0.5)+0.5 \times log_2(0.5)+0.5 \times log_2(0.5)]=2H(z)=?∑i=14?P(zi?)log2?(Pi?)=[0.5×log2?(0.5)+0.5×log2?(0.5)+0.5×log2?(0.5)+0.5×log2?(0.5)]=2
由上面三個(gè)例子可以看出,當(dāng)混亂程度越高時(shí),信息熵越大。
關(guān)于各類熵的定義及推導(dǎo),可參考這篇文章。
2. 信息增益 Information Gain
信息增益:
對于待劃分的數(shù)據(jù)集DDD,其信息熵大小是固定的,但是劃分后子代熵之和是不定的。子代熵越小說明使用此特征劃分得到的子集不確定性越小(純度越高),因此父代與子代的信息熵之差(信息增益)越大,說明使用當(dāng)前特征劃分?jǐn)?shù)據(jù)集DDD時(shí),其純度上升的更快[1]。
與決策樹關(guān)系:
我們在構(gòu)建最優(yōu)的決策樹時(shí)總希望能夠快速到達(dá)村度更高的集合,這一點(diǎn)可以參考優(yōu)化算法中的梯度下降(每一步沿著負(fù)梯度方法最小化損失函數(shù)使函數(shù)值快速減小)同理,在決策樹構(gòu)建的過程中我們總是希望集合往最快到達(dá)純度更高的子集合方向發(fā)展,因此我們總是選擇使得信息增益最大的特征來劃分當(dāng)前數(shù)據(jù)集DDD。
使用特征AAA劃分?jǐn)?shù)據(jù)集DDD,計(jì)算劃分前后各個(gè)數(shù)據(jù)集的信息熵,并計(jì)算信息增益:
g(D,A)=H(D)?H(D∣A)(5)g(D,A)=H(D)-H(D|A) \tag{5}g(D,A)=H(D)?H(D∣A)(5)
其中,假設(shè)特征AAA將數(shù)據(jù)集DDD劃分為nnn個(gè)子代,則H(D∣A)H(D|A)H(D∣A)為劃分后子代的平均信息熵:
H(D∣A)=∑i=1nP(Ai)H(Ai)(6)H(D|A)= \sum_{i=1}^nP(A_i)H(A_i) \tag{6}H(D∣A)=i=1∑n?P(Ai?)H(Ai?)(6)
例2:假設(shè)我們在調(diào)查性別與活躍度哪一個(gè)對用戶流失影響越大。[2]
樣本如下:
| M | H | 0 |
| F | M | 0 |
| M | L | 1 |
| F | H | 0 |
| M | H | 0 |
| M | M | 0 |
| M | M | 1 |
| F | M | 0 |
| F | L | 1 |
| F | M | 0 |
| F | H | 0 |
| M | L | 1 |
| F | L | 0 |
| M | H | 0 |
| M | H | 0 |
按性別分類:
| Whole | 5 | 10 | 15 |
| Male | 3 | 5 | 8 |
| Female | 2 | 5 | 7 |
整體熵:
E(S)=?[515log2(515)+1015log2(1015)]=0.9182E(S)=-[\frac{5}{15}log_2(\frac{5}{15})+\frac{10}{15}log_2(\frac{10}{15})]=0.9182E(S)=?[155?log2?(155?)+1510?log2?(1510?)]=0.9182
性別熵:
E(g1)=?[38log2(38)+58log2(58)]=0.0.9543E(g_1)=-[\frac{3}{8}log_2(\frac{3}{8})+\frac{5}{8}log_2(\frac{5}{8})]=0.0.9543E(g1?)=?[83?log2?(83?)+85?log2?(85?)]=0.0.9543
E(g2)=?[27log2(27)+27log2(27)]=0.8631E(g_2)=-[\frac{2}{7}log_2(\frac{2}{7})+\frac{2}{7}log_2(\frac{2}{7})]=0.8631E(g2?)=?[72?log2?(72?)+72?log2?(72?)]=0.8631
性別信息增益:
g(S∣g)=E(S)?815E(g1)?715E(g2)=0.0064g(S|g)=E(S)-\frac{8}{15}E(g_1)-\frac{7}{15}E(g_2)=0.0064g(S∣g)=E(S)?158?E(g1?)?157?E(g2?)=0.0064
按活躍度分類
| Whole | 5 | 10 | 15 |
| Hight | 0 | 6 | 6 |
| Mid | 1 | 4 | 5 |
| Low | 4 | 0 | 4 |
活躍度熵:
E(a1)=0E(a_1)=0E(a1?)=0
E(a2)=0.7219E(a_2)=0.7219E(a2?)=0.7219
E(a2)=0E(a_2)=0E(a2?)=0
活躍度信息增益:
g(S∣a)=E(S)?615E(a1)?515E(a2)?415E(a3)=0.0064g(S|a)=E(S)-\frac{6}{15}E(a_1)-\frac{5}{15}E(a_2)-\frac{4}{15}E(a_3)=0.0064g(S∣a)=E(S)?156?E(a1?)?155?E(a2?)?154?E(a3?)=0.0064
活躍度信息增益比性別信息增益大,也就是說,活躍度對用戶流失的影響比性別大。
2.1 信息增益最大化
2.1.1 利用離散特征進(jìn)行分類
例3:仍以上面的例子為例,之前,我們已經(jīng)計(jì)算出了活躍度對于用戶流失的影響較大,當(dāng)用戶的活躍度為Hight時(shí),用戶流失為0,當(dāng)用戶活躍度為Low時(shí),用戶全部流失,因此可以得到:
可以看到,Hight和Low組的信息熵為0,純度已達(dá)到最高;但是Mid組純度未達(dá)到最高,因此以Mid組的數(shù)據(jù)作為父代,重復(fù)例2的過程,由于例2數(shù)據(jù)只有兩個(gè)特征,因此只能嘗試使用性別分類;若例2數(shù)據(jù)有2個(gè)以上特征,則此時(shí)可以重復(fù)例2過程,計(jì)算其余特征的信息增益,并選取信息增益最大的特征作為分類依據(jù)。由此也可以看出,離散特征決策樹的最大深度不超過其特征數(shù)(連續(xù)特征決策樹的特征可多次使用)。
下面嘗試使用性別分組,Mid組的樣本:
| F | M | 0 |
| M | M | 0 |
| M | M | 1 |
| F | M | 0 |
| F | M | 0 |
對Mid組使用性別分類后的結(jié)果:
2.1.2 利用連續(xù)特征進(jìn)行分類
2.1.2.1 二分法
因?yàn)檫B續(xù)特征屬性的可取值數(shù)目不再有限,因此不能像前面處理離散屬性一樣枚舉離散屬性來對節(jié)點(diǎn)進(jìn)行劃分,因此需要對連續(xù)屬性離散化。
常用的離散化策略是二分法:
給定訓(xùn)練集DDD和連續(xù)屬性aaa,假定aaa在DDD上出現(xiàn)了nnn個(gè)不同的取值,先把這些值從小到達(dá)排序,記為{a1,a2,...,an}\{a^1,a^2,...,a^n\}{a1,a2,...,an},基于劃分點(diǎn)ttt可以將DDD分為子集Dt?D_t^-Dt??和Dt+D_t^+Dt+?,其中Dt?D_t^-Dt??是包含那些屬性aaa上取值不大于ttt的樣本,Dt+D_t^+Dt+?則包含哪些在屬性aaa上取值大于ttt的樣本。顯然,對相鄰的屬性取值aia^iai與ai+1a^{i+1}ai+1來說,ttt在區(qū)間[ai,ai+1)[a^i,a^{i+1})[ai,ai+1)中取任意值所產(chǎn)生的劃分結(jié)果相同。因此,對連續(xù)屬性aaa,我們可考慮包含n?1n-1n?1個(gè)元素的候選劃分點(diǎn)集合:
Ta={ai+ai+12}(1≤i≤n?1)(7)T_a=\{ \frac{a^i+a^{i+1}}{2} \} \quad (1 \leq i \leq n-1) \tag{7}Ta?={2ai+ai+1?}(1≤i≤n?1)(7)
即把區(qū)間[ai,ai+1)[a^i,a^{i+1})[ai,ai+1)的中位點(diǎn)ai+ai+12\frac{a^i+a^{i+1}}{2}2ai+ai+1?作為候選劃分點(diǎn),然后就可以像前面處理離散屬性值那樣來考慮這些劃分點(diǎn),并選擇最后的劃分點(diǎn)進(jìn)行樣本集合的劃分,使用的公式如下:
g(D,a)=max?t∈Tag(D,a,t)=max?t∈Ta{E(D)?∑λ∈(?,+)∣Dtλ∣∣D∣log2(∣Dtλ∣∣D∣)}(8)g(D,a)=\max \limits_{t\in T_a}g(D,a,t) =\max \limits_{t\in T_a} \{E(D)-\sum_{\lambda \in(-,+)} \frac{|D_t^\lambda|}{|D|}log_2(\frac{|D_t^\lambda|}{|D|})\} \tag{8}g(D,a)=t∈Ta?max?g(D,a,t)=t∈Ta?max?{E(D)?λ∈(?,+)∑?∣D∣∣Dtλ?∣?log2?(∣D∣∣Dtλ?∣?)}(8)
其中g(D,a,t)g(D,a,t)g(D,a,t)是樣本集DDD基于劃分點(diǎn)ttt二分后的信息增益。
劃分的時(shí)候,選擇使g(D,a,t)g(D,a,t)g(D,a,t)最大的劃分點(diǎn)。[3]
2.1.2.2 信息熵、信息增益及二分法的Python實(shí)現(xiàn)
例4:下面以周志華《機(jī)器學(xué)習(xí)》—西瓜數(shù)據(jù)集3.0 為例,計(jì)算特征“密度”的最佳劃分點(diǎn)以及其信息增益,數(shù)據(jù)如下:
import pandas as pd import numpy as np df = pd.read_csv("Data/Watermelon_Data.txt") df['好瓜'] = df['好瓜'].map({'是':1, '否':0}) df| 1 | 青綠 | 蜷縮 | 濁響 | 清晰 | 凹陷 | 硬滑 | 0.697 | 0.460 | 1 |
| 2 | 烏黑 | 蜷縮 | 沉悶 | 清晰 | 凹陷 | 硬滑 | 0.774 | 0.376 | 1 |
| 3 | 烏黑 | 蜷縮 | 濁響 | 清晰 | 凹陷 | 硬滑 | 0.634 | 0.264 | 1 |
| 4 | 青綠 | 蜷縮 | 沉悶 | 清晰 | 凹陷 | 硬滑 | 0.608 | 0.318 | 1 |
| 5 | 淺白 | 蜷縮 | 濁響 | 清晰 | 凹陷 | 硬滑 | 0.556 | 0.215 | 1 |
| 6 | 青綠 | 稍蜷 | 濁響 | 清晰 | 稍凹 | 軟粘 | 0.403 | 0.237 | 1 |
| 7 | 烏黑 | 稍蜷 | 濁響 | 稍糊 | 稍凹 | 軟粘 | 0.481 | 0.149 | 1 |
| 8 | 烏黑 | 稍蜷 | 濁響 | 清晰 | 稍凹 | 硬滑 | 0.437 | 0.211 | 1 |
| 9 | 烏黑 | 稍蜷 | 沉悶 | 稍糊 | 稍凹 | 硬滑 | 0.666 | 0.091 | 0 |
| 10 | 青綠 | 硬挺 | 清脆 | 清晰 | 平坦 | 軟粘 | 0.243 | 0.267 | 0 |
| 11 | 淺白 | 硬挺 | 清脆 | 模糊 | 平坦 | 硬滑 | 0.245 | 0.057 | 0 |
| 12 | 淺白 | 蜷縮 | 濁響 | 模糊 | 平坦 | 軟粘 | 0.343 | 0.099 | 0 |
| 13 | 青綠 | 稍蜷 | 濁響 | 稍糊 | 凹陷 | 硬滑 | 0.639 | 0.161 | 0 |
| 14 | 淺白 | 稍蜷 | 沉悶 | 稍糊 | 凹陷 | 硬滑 | 0.657 | 0.198 | 0 |
| 15 | 烏黑 | 稍蜷 | 濁響 | 清晰 | 稍凹 | 軟粘 | 0.360 | 0.370 | 0 |
| 16 | 淺白 | 蜷縮 | 濁響 | 模糊 | 平坦 | 硬滑 | 0.593 | 0.042 | 0 |
| 17 | 青綠 | 蜷縮 | 沉悶 | 稍糊 | 稍凹 | 硬滑 | 0.719 | 0.103 | 0 |
| 0.244 | 0.941 | 0.057 |
| 0.294 | 0.880 | 0.118 |
| 0.352 | 0.811 | 0.187 |
| 0.382 | 0.735 | 0.263 |
| 0.420 | 0.904 | 0.094 |
| 0.459 | 0.967 | 0.031 |
| 0.518 | 0.994 | 0.004 |
| 0.575 | 0.995 | 0.003 |
| 0.601 | 0.995 | 0.003 |
| 0.621 | 0.994 | 0.004 |
| 0.637 | 0.967 | 0.031 |
| 0.648 | 0.991 | 0.007 |
| 0.661 | 0.997 | 0.001 |
| 0.681 | 0.973 | 0.025 |
| 0.708 | 0.997 | 0.001 |
| 0.746 | 0.931 | 0.067 |
繼續(xù)對其他的特征進(jìn)行以上步驟,可以得到其他特征的信息增益,因此該連續(xù)特征的決策樹的第一個(gè)分割點(diǎn)為信息增益最大的特征所對應(yīng)的分割點(diǎn)。
下面是本數(shù)據(jù)集中各特征的信息增益值:[4]
g(D∣色澤)=0.109g(D∣根蒂)=0.143g(D|色澤)=0.109 \quad g(D|根蒂)=0.143g(D∣色澤)=0.109g(D∣根蒂)=0.143
g(D∣敲聲)=0.141g(D∣紋理)=0.381g(D|敲聲)=0.141 \quad g(D|紋理)=0.381g(D∣敲聲)=0.141g(D∣紋理)=0.381
g(D∣臍部)=0.289g(D∣觸感)=0.006g(D|臍部)=0.289 \quad g(D|觸感)=0.006g(D∣臍部)=0.289g(D∣觸感)=0.006
g(D∣密度)=0.262g(D∣含糖率)=0.349g(D|密度)=0.262 \quad g(D|含糖率)=0.349g(D∣密度)=0.262g(D∣含糖率)=0.349
由此可見,“紋理”的信息增益量值最大,因此”紋理“被選作根節(jié)點(diǎn)劃分屬性。只要重復(fù)以上過程,就能構(gòu)造出一顆決策樹:
需要注意的是:與離散屬性不同,若當(dāng)前節(jié)點(diǎn)劃分屬性為連續(xù)屬性,該屬性還可以作為其后代節(jié)點(diǎn)的劃分屬性。如下圖的一顆決策樹,“含糖率”這個(gè)屬性在根節(jié)點(diǎn)用了一次,后代節(jié)點(diǎn)也用了一次,只是兩次劃分點(diǎn)取值不同。
參考資料
[1] Tomcater321.決策樹–信息增益,信息增益比,Geni指數(shù)的理解
[EB/OL].https://blog.csdn.net/Tomcater321/article/details/80699044, 2018-06-14.
[2] It_BeeCoder.機(jī)器學(xué)習(xí)中信息增益的計(jì)算方法 [EB/OL].https://blog.csdn.net/it_beecoder/article/details/79554388, 2018-03-14.
[3] 天澤28.決策樹(decision tree)(三)——連續(xù)值處理 [EB/OL].https://blog.csdn.net/u012328159/article/details/79396893, 2018-02-28.
[4] 天澤28.決策樹(decision tree)(一)——構(gòu)造決策樹方法 [EB/OL].https://blog.csdn.net/u012328159/article/details/70184415, 2017-04-18.
總結(jié)
以上是生活随笔為你收集整理的监督学习 | ID3 决策树原理及Python实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 最小二乘支持向量机的分析与改进及Pyth
- 下一篇: 机器学习 | 梯度下降原理及Python