1. 程式人生 > >決策樹三大演算法之一ID3

決策樹三大演算法之一ID3

一、決策樹 決策樹是一種樹形結構,每一個內部節點表示在某一屬性上的測試,每一條分支代表一個測試輸出,每一個葉子節點代表一種類別。 決策樹採用的是自頂向下的遞迴方法,其基本思想是以資訊熵為度量建立一個資訊熵下降最快的樹。到葉子節點處的熵值為0,每一個葉子節點中的例項都屬於同一類。 需要解決的問題:當前節點應該選擇哪個屬性來劃分。 ID3、C4.5和CART就是用來解決上述問題並建立一棵決策樹。

二、ID3演算法原理

1、資訊熵 資訊熵表示一個事件的不確定性,這個不確定性越大我們越難得知這個事件到底是發生還是不發生。如果一個事件發生的結果有兩種,任意一種結果發生的概率超過0.5,這個事件的不確定性就會減小,因為我們知道概率大於0.5的那個結果很可能會發生。一個事件的結果可能有多種,這多種結果發生的概率之間差別越大,這個事件的不確定性越小即它的資訊熵越小,因為發生概率大的結果很可能會發生,所以該事件的不確定性越小

如果一個事件的結果只有一種,那資訊熵顯然為0。

假設一個事件x發生(記為1)的概率為0.9,不發生(記為0)的概率為0.1。這相當於是x的兩種結果。 在這裡插入圖片描述 我們用 pi 表示事件x發生或者不發生的概率,也就是p0=0.1,p1=0.9。用H(x)表示x事件的不確定性。由資訊熵的定義可知,如果pi之間差別越大,則H(x)越小。

現在我們來求事件x的資訊熵即H(x): H(x)應該是pi的反函式,因為對於較大的pi我們想得到比較小的H(x)。由於ln函式是增函式,所以ln(pi)是遞增的,那麼-ln(pi)就是遞減的,滿足pi越大,-ln(pi)越小。 所以我們規定H(x): 在這裡插入圖片描述 2、條件熵 由上述我們求得的事件X的資訊熵的公式,我們可以得到事件X和事件Y聯合發生這個事件的資訊熵H(X,Y)。 小x和小y分別是事件X和事件Y個某個結果,也可以這樣認為小x和小y分別是隨機變數X和隨機變數Y分佈中的某個元素。

H(X,Y)= 在這裡插入圖片描述 資訊熵H(X,Y)表示事件X和事件Y聯合發生的不確定性,用資訊熵H(X,Y)減去事件X單獨發生時的資訊熵H(X)得到:在X事件發生的前提下事件Y發生“新”帶來的資訊熵。將“新”帶來的資訊熵記為**條件熵H(Y|X)。**公式如下: 在這裡插入圖片描述 在這裡插入圖片描述 因為H(Y|X)表示的是在X事件發生的前提下事件Y發生“新”帶來的資訊熵,所以上式必須先固定x在固定y。(上式本來有兩種拆法,x前y後或者y前x後,具體情況具體分析) 在這裡插入圖片描述 上式小寫x表示的是事件X的某種結果。

條件熵公式: 在這裡插入圖片描述 3、資訊增益

瞭解經驗熵和經驗條件熵: 在這裡插入圖片描述 資訊增益:

我們知道H(Y|X)表示的是在X事件發生的前提下事件Y發生“新”帶來的資訊熵(不確定性),H(Y)表示Y事件獨立發生的資訊熵(不確定性),那麼H(Y)-H(Y|X)表示的就是在X事件發生的前提下事件Y的不確定性減少的程度,這就是資訊增益

下面我們從對一個數據集D進行分類來探討資訊增益: 現在想要把資料集D分成K個類,資料集中的資料都具有某些特徵,我們選擇幾個主要的特徵來作為分類的依據。那麼對於當前資料集D我們應該選擇哪個特徵來劃分呢?**答案是對於每個特徵(A表示某一個特徵)我們都求其資訊增益g(D,A),選擇資訊增益最大的那個特徵來劃分當前資料集。**因為資訊增益g(D,A)表示的是在給定特徵A的條件下,資料集D劃分事件的不確定性減少的程度,也就是用資訊增益g(D,A)最大的那個特徵來劃分資料集D會得到這樣一個結果:只有一個類中的樣本特別多,其他K-1個類中要麼只有少數樣本,要麼壓根就沒有。

資料集D的熵: 資料集D劃分為K個類,那麼這K個類就是資料集D劃分事件的K個結果,資料集D的熵H(D)表示的是這K個結果發生的概率是不是區分的很明顯。如果資料集D被分為一個類,那資料集D的熵為0,如果資料集D被分為了K個類且每個類中的樣本個數相同,則資料集D的熵最大。對於一個即將對它進行分類的資料集來說,它的熵意味著它的純度(它可以被分為K個類則純度最低,它只能被分為一個類則純度最高)。

資訊增益g(D,A)的計算方法: 基本的記號如下: 在這裡插入圖片描述 計算公式: 在這裡插入圖片描述 其中: |Ck| / |D|表示的是第K個結果出現的概率。 在這裡插入圖片描述 資料集D就像事件Y,對D用K個類來劃分就像是事件Y有K個結果,Dk個就是K個結果中的某一個。 特徵A就像事件X,特徵A的n個取值就像事件X的n個結果,Ai就是n個結果中的某一個。 事件Y和事件X的結果就像是隨機變數Y和隨機變數X的分佈。

**P(Ai)表示的是特徵A(有n個取值)的取第i個值的概率,用資料集D中在特徵A的第i個取值上相同的樣本數(就是Di)比上資料集D的總樣本數來求。**這裡可以舉個例子,假設有一個西瓜資料集D,瓜紋是西瓜資料集D的其中一個特徵,瓜紋這個特徵就有多個取值,比如條紋、全黑、全綠等等,這裡P(Ai)指的就是瓜紋特徵的不同取值的概率,用西瓜資料集D中瓜紋為該取值的數目比上西瓜資料集D的總數目求得。

p(Dk|Ai)表示的是以特徵A取第i個值為前提的第k個類的概率。特徵A取第i個值得到資料集Di,用資料集Di中屬於第k個類的樣本數(就是Dik)比上資料集Di的總樣本數得到p(Dk|Ai)。 在這裡插入圖片描述 在這裡插入圖片描述 小結一下: 依據特徵A的n個不同取值我們可以把資料集D分為n個數據集Di,1=<i<=n。從條件熵H(D|A)的最終公式可以看出,H(D|A)等於這n個數據集自身的熵乘上它所依據的特徵A的取值的概率再相加。如果H(D|A)的值比較小,意味著大部分的資料集中的樣本已經屬於同一個類,那麼這些資料集的熵為0,所以H(D|A)的值會比較小,而g(D,A)會比較大。 對於其他的特徵我們都可以求其對於資料集D的資訊增益,選擇資訊增益最大的那個特徵來劃分資料集D,我們會得到一個最純的劃分結果,每個劃分的資料集中的樣本基本屬於同一個類。

四、ID3演算法建立決策樹的步驟

1、計算當前資料集的經驗熵。 在這裡插入圖片描述 2、遍歷所有特徵求每個特徵的經驗條件熵。 在這裡插入圖片描述 3、選擇經驗條件熵最大的特徵劃分當前資料集。對於當前資料集所劃分的所有子集,如果某個子集出現下面情況則迭代結束。情況如下: (1)當前集合中的樣本屬於同一個類,無需劃分。 (2)當前集合中的樣本在所有屬性上取值相同(雖然它們屬於不同的類),無法劃分。 (3)當前集合為空,不能劃分。 4、對於能劃分的所有子集,重複1、2、3步驟。