J48原理:本來名稱為C4.8,由於是Java實現的算法,再加上C4.8為商業收費算法。 其實J48是自上而下的,遞歸的分治策略,選擇某個屬性放置在根節點,為每個可能的屬性值產生一個分支,將實例分成多個子集,每個子集對應一個根節點的分支,然后在每個分支上遞歸地重復這個過程。當所有實例有相同的分類時,停止。
問題是如何:如惡化選擇根節點屬性,建立分支呢?
例如:weather.nominal.arff
我們希望得到的是純分裂,即分裂為純節點,希望找到一個屬性,它的一個節點全是yes,一個節點全是no,這是最好的情況,因為如果是混合節點則需要再次分裂
通過量化來確定能產生最純子節點的屬性---計算純度(目標是得到最小的決策樹)。而自上而下的樹歸納法用到了一些啟發式方法---產生純節點的啟發法是以信息論為基礎的,即信息熵,以bits測量信息。
信息增益=分裂前分布的信息熵-分裂后分布的信息熵,選擇信息增益最大的屬性。
計算這四個屬性的信息增益,如下圖:
經過計算得到outlook、windy、humidity、temperature的信息增益分別為0.247bits、0.048bits、0.152bits、0.029bits,所以選擇outlook為根節點。
繼續分裂....
使用J48構建決策樹如圖:
計算舉例
分裂前:Info(outlook)=entropy(outlook)=-9/14*lg(9/14)-5/14*lg(5/14)=0.940286
分裂后:Inf0a(outlook)=5/14*Info(D1)+4/14*Info(D2)+5/14*Info(D3)=0.693535
Info(D1)=-2/5*lg(2/5)-3/5*lg(3/5)=0.9709490 , Info(D2)=0
Info(D3)=-3/5*lg(3/5)-2/5*lg(2/5)
Gain(outlook)=Info(outlook)-Inf0a(outlook)=0.247bits
提示,目前介紹不完整還有一些提升准確性的概念方法比如gain raito(增益比率)