1. 程式人生 > >詳解決策樹、python實現決策樹

詳解決策樹、python實現決策樹

決策樹模型

定義

分類決策樹模型是一種描述對例項進行分類的樹形結構。決策樹由節點(Node)和有向邊(directed edge)組成。節點有兩種型別:內部節點(internal node)和葉節點(left node)。內部節點表示一個特徵或一個屬性,葉節點表示一個類。

決策過程

用決策樹分類,從根節點開始,對例項的某一特徵進行測試,根據測試結果,將例項分配到其子節點(每一個子節點對應著特徵的一個取值)。遞迴的進行測試和分配,直至葉節點,得到分類結果。

我們來舉個例子,看一下決策樹的決策過程。

假設小明要出門了,需要選擇一種出行方式,假設出行方式有以下幾種:步行,自行車,駕車,地鐵。如果距離很近,那麼小明就選擇步行,如果不是特別遠,就選擇自行車,如果特別遠的話,就要選擇駕車或地鐵了。然後考慮今天是不是限號呢,不限號就駕車,限號就只能地鐵了,現在我們把這個決策過程畫出來。
這裡寫圖片描述

上圖就表示了小明在選在出行方式時的策略,對照上述的定義,可以看出這棵決策樹有兩個內部節點(距離、限號)、四個葉節點(步行,騎車,駕車、地鐵),也就是說在決策的時候要考慮這兩個特徵,最終的結果可能有四種。

決策樹學習

目標:決策樹的學習,就是根據資料集構建出一棵決策樹。我們希望構建出來的決策樹,既能很好的對資料集進行分類,又具有很好的泛化能力。

啟發式學習:由於基於特徵空間劃分的類的條件概率模型有無限多個,從所有可能的決策樹中選取最優化決策樹是NP完全問題,所以現實中決策樹學習演算法是採用啟發式方法,近似求解這一最優化問題,這樣得到的決策樹是次優的。也就是說現實中的決策樹學習演算法,一般是逐步構建決策樹,每次選取的特徵是保證最優劃分的,但是這樣的得到的決策樹不一定是所有可能的決策樹中最優的。

學習過程:決策樹學習演算法通常就是遞迴的選擇最優特徵,兵器人根據該特徵對訓練集進行劃分,在劃分之後的訓練集上再進行決策樹學習演算法,如果能夠大致分類,則設定成葉節點,否則繼續選擇最優特徵,知道所有的訓練資料子集都能被正確的分類或者沒有可選的特徵為止。

剪枝:這樣的演算法生成的決策樹,一般對訓練集的分類效果很好、但泛化能力不強,也就是說容易產生過擬合現象。因此需要對構建好的資料集進行剪枝,將樹變得更簡單,因而具有更好的泛化能力。

可以看出決策樹的學習演算法一般包含三個過程:特徵選擇、決策樹生成和決策樹剪枝。

特徵選擇

特徵選擇就是決定用哪個特徵來劃分特徵空間。

訓練集中的樣本會包含很多特徵,在選擇特徵的時候,我們應該考慮選用哪個特徵劃分特徵空間的效果更好。

問題是的關鍵在於我們如何比較哪個特徵的劃分效果更好,也就是如何確定評價指標。

解決思路是這樣的,如果選取某個特徵對資料集劃分後,得到的若干個子集,如果這些子集內的分類效果比選擇其他特徵劃分後的效果都要好,那麼就應該選擇這個特徵。

資訊增益

在介紹資訊增益之前需要先給出熵和條件熵的定義。

在資訊理論中熵(entropy)是表示隨機變數不確定性的度量。
X是一個取有限個值的離散性隨機變數,其概率分佈為

P(X=xi)=pi,1,2,3,...,n
則熵定義為
H(X)=i=1npilog(pi)
隨機變數的不確定行越大,熵越大。

當隨機變數指取兩個值時,例如1,0,即X的分佈為

P(X=1)=p,p(X=0)=1p,0p1

此時,熵為

H=plog2p(1p)log2(1p)
熵隨p的變化曲線為

這裡寫圖片描述

p=0p=1時,H(p)=0,隨機變數完全沒有不確定性。當p=0.5時,不確定性最大。

設隨機變數(X,Y),其聯合概率分佈為

P(X=xi,Y=yi)=pij,i=1,2,...,n,j=1,2,...m
條件熵H(Y|X)表示在已知隨機變數X的條件下隨機變數Y的不確定性。隨機變數X給定的條件下隨機變數Y打分條件熵(conditional entropy)H(Y|X), 定義為X給定下Y的條件概率分佈的熵對X的數學期望。
H(Y|X)=i=1npiH(Y|X=xi)
這裡,pi=P(X=xi)

當熵和條件熵中的而概率分佈由資料估計的倒時,所對應的熵和條件熵分別成為經驗熵(empirical entropy)和經驗條件熵(empirical conditional entropy)

特徵A對訓練集D的資訊增益g(D,A),定義為集合D的經驗熵H(D)和特徵A給定條件下D的經條件熵H(D|A)之差。

資訊增益(information gain) 表示得知特徵