大白話5分鐘帶你走進人工智能-第二十五節決策樹系列之信息增益和信息增益率(4)

                                                       第二十五節決策樹系列之信息增益和信息增益率(4)html

上一節咱們講解了決策樹的分裂條件以及評估純度的其中一個方式,基尼係數。本節的話,咱們再講解一個評估純度的方式,基於信息增益的方式,即ID3樹使用的評估方式。它辦的事跟Gini係數同樣,也是評價純度,可是它更客觀一點,但它算起來比Gini係數稍慢一點,它辦的事跟Gini係數同樣,也是評價純度,可是它更客觀一點,算起來比Gini係數稍慢一點,更準確一點。這是兩種不一樣的評價方式。算法

目錄app

1-信息增益ui

2-信息增益率編碼


1-信息增益

帶着信息兩字就離不開熵,熵首先是一個熱力學的概念,好比一個罐子,裏面有好多氣體分子,分子在作隨機無規則的運動,叫熱運動,運動的越激烈,系統內的熵就越高。它的根源是一個熱力學上的概念。引入到信息論裏的熵,雖然仍是這個字,但已經跟原來的熱力學沒有直接的關係了,只不過公式形式是同樣的。即:url

                                               H(X)=\sum_{i=1}^{n} p\left(x_{i}\right) I\left(x_{i}\right)=-\sum_{i=1}^{n} p\left(x_{i}\right) \log _{b} p\left(x_{i}\right)

咱們明顯的發現它分爲兩部分,一部分是pi,pi表明標籤值或者類別值在這個系統裏的佔比另外一部分是log pi。咱們稱-\log _{2} p\left(x_{i}\right) 叫作信息它的單位是bit,0和1的比特。信息的原始公式是:$I(X=x i)=-\log _{2} p\left(x_{i}\right)$。舉個例子來講明下:假設無線電考試做弊,選擇題是ABCD四個選項,用0和1編碼的話,不混淆的狀況下,辨別四個選項。應該如何的設置這個暗號?最直觀的方法就是下面這種表示方法:即A表示爲00,B表示爲01,C表示爲10,D表示爲11。在不知道它們的機率的狀況下,這麼選最合適。可是這種每次發的話若是有24道題,就會發48個數字。若是收費是按數字來的話有沒有相對更經濟點的方式能少發點總次數讓答案還不被損失的傳過去?假如考試95%的答案都是C,還用兩位數字編碼就有點浪費了。咱們天然而然想到的是讓答案比較多的選項用盡可能少的位數表示。假設ABCD的機率分佈是1/8,1/8,1/2,1/4,C出現的機率最高。我用0表示C,若是用D表示1 的話,爲了避免混淆的話,A,B只能用兩位以上的表示01或者10,100等 ,若是發過來的是01,那麼答案究竟是一個C,一個D 仍是A或者B。因此因此爲了不混淆,1就不再能單獨再表示答案了。那什麼能夠用呢?兩位的能夠用。假如D設爲10的話,01還能再用於別的答案嗎?不能,由於好比來一個0010,不知道是兩個0,一個10。仍是一個0,一個10和0。10被D用的話,11還能在用嗎?不能了。由於若是A設置爲爲11的話,最後剩一個答案B從000~111都不能表示了,都會和11混淆。因此11在D爲10的前提下不能再用了。因此兩位的只能用10。即D用10。剩下A,B的表示都是三位數了。有興趣的能夠試下在C 用0表示,D用10表示,A用111,B用101表示不會被混淆。假如咱們40道題,20道題是C,10道題是D,5道題是B,5道題是A,如今只須要發送20*1+10*2+5*3+5*3=70。對比平均編碼長度,都是兩位的話。40*2=80,少發送了10個字節。在徹底無損的狀況下,咱們只用了一點點的小技巧,就能使數據進行壓縮。而且壓縮是免費的。spa

咱們來看下一個信息的計算。-log2(1/2)=1,-log2(1/4)=2,-log2(1/8)=3。當機率爲1/2的時候,用一位編碼解決,機率爲1/4的時候能夠用兩位編碼解決,而1/8的時候用三位編碼解決。發現信息的值恰好和位數對應上,因此這也就是爲何用-log2Pi來表示信息的概念。它的單位真的是比特。它是無損壓縮的理論上限,意思就是說你再怎麼耍技巧。要想把信息完整的發過來,至少須要這麼多信息。這也是信息的來源。而咱們的熵其實就是平均碼長。計算方式爲1/8*3+1/8*3+1/2*1+1/4*2。意思就是說有兩個1/8的數須要3個碼長,1/2的數須要1個碼長,1/4的數須要2個碼長,因此整個系統發送過來平均發送一個答案須要1/8*3+1/8*3+1/2*1+1/4*2這麼多的碼長。這個就是熵。假如答案所有是A,或者裏面答案只有1個A的時候,實際上咱們就不須要發送那麼多碼長了,直接發送A的編號,或者不發,由於咱們已經知道答案就是A了。因此這個系統裏面答案越純,發送的信息越少。而裏面答案越多,越沒有規律可循,咱們就須要用越大的信息來發送。因此咱們就用熵的概念來表示決策樹分類的子集的純度。對於純度來講,純度的pi表明標籤值在這個系統裏的佔比,純度越純表明熵越低,咱們用信息熵來評估純度,它其實思路和基尼係數同樣,基尼係數越低越純,熵也是,越低越純。3d

瞭解完熵的概念,咱們再說下信息增益:分裂前的信息熵 減分裂後的信息熵。它同樣也須要在前面加一個權重。code

                                              IG= H(D)- H(D1)*|D1|/|D|- H(D2)*|D2|/|D|。
假如以下數據:
htm

 

分裂以前的熵是H(D)=-log2(0.2)-log2(0.8)。分裂以後的熵是H(D1)=-log2(0.3)-log2(0.7)和H(D1)=-log2(0.5)-log2(0.5).那麼信息增益IG=H(D)-(D1/D*H(D1)+D2/D*H(D2))=H(D)-(100/1000*H(D1)+900/1000*H(D2))。若是不乘以比重的話假如一個節點裏面就分了一個數據,另外一個節點分了不少的數據。會致使一個加權的很高,一個加權的很低,很不合理。因此須要乘以各自數據所佔的比重。信息增益是正數仍是負數呢?咱們來推測下,熵是越分越低好,仍是越分越高好,確定是越分越低好,越低表明越純。也就是說原先系統比較混亂,越分後面越清楚,越純,因此咱們一開始的熵是比較高的,後面愈來愈低,而信息增益是拿以前的熵減去以後的熵,因此確定是個正數。這個正數越大越好,由於越大表明此次分裂使系統的混亂程度下降的越多。

咱們來看一個實際應用信息增益解決生活中的一個案例:

如下是一個統計用戶流失度的一個數據,is_lost是它的標籤,第一列是用戶ID,第二列gender是性別,第三列act_info是活躍度,第四列is_lost是否流失。咱們但願經過分析找到最能影響用戶流失的因素。

其中重點說下第三列,自己來講活躍度應該是個連續性數據,這裏作了一些處理。由於信息增益天生對連續性數據支持的不是特別好。這裏連續性訓練集交給計算機的數據,通常是把同一個區間段的歸爲一類讓它變成離散型數據。好比身高是連續性數據,以10釐米一組的話,就會分紅各個組,每組的數據再進行統計。咱們在作其餘算法模型的時候有時候還會對處理完後的離散數據進行one-hot編碼,假如訓練集裏有四個城市,北京,上海,廣州,深圳,在統計上就是表中的某一列,要怎麼把它轉化成計算機數據?北京爲1,廣州爲2,上海爲3,深圳爲4,直觀的講難道深圳>北京,因此這樣的數據交給算法是不合適的。因此這裏咱們用one-hot編碼對數據進行處理,即把一個維度上的四個值拆成四列,is北京,is廣州,is上海,is深圳,這四列裏只會同時有一個爲1,若是住在北京,那麼北京是1,其它爲0。即把本來在一個維度上提取下來的數據,強制地拆成若干個列的這種方式叫作one-hot編碼,所謂one-hot,即獨熱編碼,就是這四項裏邊只有一個被點亮了。一般對於沒有大小順序的數據咱們必定要使用one-hot編碼。本例中由於只是單純看下活躍度的數據狀況各個佔比對整體用戶損失狀況的影響,因此不必再轉成one-hot編碼。咱們對上面的數據進行一個統計:

這裏面positive是沒有流失,對應數值1。negative是流失,對應數值是0。因此第二行的統計實際上就是在男性的前提下,positive爲3,能夠用條件機率表示成p(y=1|x=man)=3/8。咱們看下上面兩個條件分裂下各自的信息增益。

15個樣本,其中負例有10個,正例有5個。P1對應着10/15,P2對應着5/15,因此原始的總體熵H(D)。

                        E(S)=-\frac{5}{15} \log _{2}\left(\frac{5}{15}\right)-\frac{10}{15} \log _{2}\left(\frac{10}{15}\right)=0.9182

假設選擇男女做爲分裂條件,則性別熵是:男是g1,女是g2。至關於分紅兩個子樹。

                                                                        E\left(g_{1}\right)=-\frac{3}{8} \log _{2}\left(\frac{3}{8}\right)-\frac{5}{8} \log _{2}\left(\frac{5}{8}\right)=0.5543

                                                                      E\left(g_{2}\right)=-\frac{2}{7} \log _{2}\left(\frac{2}{7}\right)-\frac{5}{7} \log _{2}\left(\frac{5}{7}\right)=0.8631

則性別信息增益:由於男性佔8/15,女性佔7/15,又乘以各自比例,因此:

                                                                     IGain(S, g)=B(S)-\frac{8}{15} E\left(g_{D}\right)-\frac{7}{15} E\left(g_{2}\right)=00064

同理計算活躍度的熵:至關於分紅3個子樹。

                                                            則 $E(a_{1})=0 \quad E\left(a_{2}\right)=0.7219 \quad E(a_3)=0.0$

活躍度信息增益:

                                                             IGain(S, a)=E(S)-\frac{6}{15} E(a)-\frac{5}{15} B\left(a_{2}\right)-\frac{4}{15} E(a)=0.6776

很明顯活躍度的信息增益比較大,說明熵減的厲害,也就是意味着活躍度對用戶流失的影響更大。

2-信息增益率

假如不幸以這uid一列做爲分裂條件去選擇了,咱們的目標是選擇信息增益最大的方式去分裂,什麼狀況下信息增益最大?當分了一個和用戶數量一樣多分枝的子節點,15個子節點的時候,此時信息增益是最大的,由於全部葉子節點都最純了,只有一個數據,則每個節點的熵都是-log2(1)=0,按照信息增益的計算公式IG=E(s)-0=E(s),至關於沒減,那麼信息增益確定是最大的。但這樣會致使什麼問題呢,過擬合問題。對訓練集分的特別完美。爲了去懲罰這種分裂方式,咱們引入另外一個計算純度的計算方式:信息增益率。

計算公式爲:信息增益/類別自己的熵。

                                      G R(S)=\frac{G(S)}{S I(S)}               S I|S|=-\sum_{j=1}^{m} \frac{\left|T_{j}\right|}{|T|} \times \log _{2}\left|\frac{\left|T_{j}\right|}{|T|}\right|

既然是熵,公式形式就是- ∑Pi*log2Pi的形式,算熵就須要pi,要pi就須要把原來的數據分爲幾堆。原來是靠yi=label來分堆的,那麼好比30,30,10,p1=3/10,p2=3/10,p3=0.1,來算節點內部的pi,而如今的pi是總的系統的pi,系統分紅三份了,就有三類數據,此時的pi就是以節點的數據佔總的數據佔比爲依據,而不是以看節點內y的label 標籤爲依據。好比下圖:

 

咱們計算此次分裂狀況的類別自己的熵時應該把D1,D2,D3都考慮進去。D1個數佔總數爲50/350,因此T1/T=-50/350,依次類推。因此SIS=-50/350*log250/350-100/350*log100/350-200/350*log200/350,爲此次分裂狀況下類別自己的熵。若是咱們按照以前計算用戶留存的例子來講,按照序號來分的話,分紅15個節點,此時的信息增益很是很是大。可是分子SIS會變大仍是小呢?咱們能夠直觀地感覺下,此時分紅的15個子節點,每個子節點都只包含一個數據,而計算SIS的時候是考慮全部節點的,因此至關於把分紅的15個節點當作一個總體,每個子節點都是一個子集,此時這個系統裏面類別特別多,因此特別混亂,總體熵確定越高。因此把這個數放在分母上,即使原先的信息增益很大,但由於除了一個很大的分母,因此總體值也變小。所以咱們要想使得信息增益率大就須要分母越小,即系統自己的熵越小,說明分的節點不是那麼多,而且做爲一個系統來講,相對類別純一點,沒有那麼多節點,總體系統熵就越低。分子越大,即信息增益又很大,說明本次分類使系統混亂程度下降的越多。

因此信息增益率能自動的幫咱們選擇分幾支,用什麼條件分最好的問題,爲何要引入信息增益率呢?實際上背後是符合最大熵模型的。

咱們總結下分類樹如何分裂?即遍歷全部可能的分裂方法。 可使用3種方式判斷純度 即 Gini係數對應CART樹, 信息增益 對應ID3樹, 信息增益率對應 C4.5樹。

下一節咱們講解另外一種分裂方式,迴歸樹。

相關文章
相關標籤/搜索