1. 程式人生 > >決策樹分類器(ID3、C4.5 Java實現)

決策樹分類器(ID3、C4.5 Java實現)

分類

什麼是分類?舉個例子,銀行貸款員需要分析資料,以便搞清楚哪些是貸款申請者是值得信賴的。通訊公司也希望能分清楚哪些客戶容易接受某一套餐,從而定向營銷。資料分類一般又包括學習階段(構建分類器)和分類階段(使用模型預測給定資料的類標號)。

決策樹分類器

決策樹分類演算法是資料探勘、機器學習中最常使用的一種分類演算法。決策樹(decision tree)是一種類似於流程圖的樹結構,其中,每個內部節點的分支代表了資料的某一特定屬性取不同值的情況,而每個葉節點存放一個類標號。一個例子如下,其表示了不同情況下是否出去玩:
決策樹示例
可以看出決策樹非常直觀,容易被人理解。決策樹的學習和分類也比較簡單快速。那麼如何構建決策樹呢?J.Ross Quinlan 提出了迭代的分裂器(Iterative Dichotomiser,ID3)

。ID3採用貪心方法,自頂向下遞迴分治構造分類器。它的核心是分裂準則(splitting criterion)即怎樣的屬性比較適合做分裂節點。然後自定向下,從根節點開始,一步一步找最好的分裂屬性。
ID3的分裂準則就是資訊增益,它基於的夏農的資訊理論。
: Info(D)=mi=1pilog2(pi)
其中pi是D中任意元組屬於類Ci的非零概率
如果現在我們用屬性A將它分為幾個分割槽,
它的InfoA(D)=vj=1|Dj||D|×Info(Dj)
而分類之後的資訊增益Gain(A)=Info(D)InfoA(D)
所以每一次我們只要找到資訊增益最大的屬性作為分裂結點即可。

可是ID3採用的資訊增益有以缺陷,它會傾向於選擇屬性值較多的屬性。舉個例子,如果要分類電話使用者,而用他們的電話號碼做屬性,它的資訊增益無疑是最大的,可是卻沒有用處。基於此,又有人提出了C4.5演算法,它的分裂準則是增益率
它使用分裂資訊(split information)值將資訊增益規範化。分裂資訊定義如下:
SplitInfoA=vj=1|Dj||D|×log2(|Dj||D|)
然後最終的增益率GainRate(A)=Gain(A)SplitInfoAD

下面我將給出Java實現的演算法,由於程式碼量較多,我將上傳資源,點選下載