關於決策樹的purity的計算方法能夠參考:
決策樹purity/基尼係數/信息增益 Decision Trees
若是有不懂得能夠私信我,我給你講。html
用下面的例子來理解這個算法:算法
下圖爲咱們的訓練集。總共有14個訓練樣本,每一個樣本中有4個關於天氣的屬性,這些屬性都是標稱值。輸出結果只有2個類別,玩(yes)或者不玩(no):
數據庫
首先先計算整個數據集的熵Entropy:機器學習
而後咱們要考慮根據哪個屬性進行分裂,假設根據Outlook屬性進行分裂,咱們能夠發現Outlook中有三個值,分別是:Sun,Rain,Overcast,分別計算他們的熵:
\(Entropy(S_{sun})=-(\frac{2}{5}*log_2(\frac{2}{5})+\frac{3}{5}*log_2(\frac{3}{5}))=0.971\)
\(Entropy(S_{overcast})=-(\frac{4}{4}*log_2(\frac{4}{4})+\frac{0}{4}*log_2(\frac{0}{4}))=0\)
\(Entropy(S_{rain})=-(\frac{3}{5}*log_2(\frac{3}{5})+\frac{2}{5}*log_2(\frac{2}{5}))=0.971\)
計算完三個Entropy後,來計算信息增益Information Gain:
\(IG(S,Outlook)=Entropy(S)-(\frac{5}{14}*Entropy(S_{sun})+\frac{5}{14}*Entropy(S_{overcast})+\frac{5}{14}*Entropy(S_{rain}))=0.246\)學習
用一樣的道理,咱們能夠求出來剩下的幾個特徵的信息增益:
\(IG(S,Wind)=0.048\)
\(IG(S,Temperature)=0.0289\)
\(IG(S,Humidity)=0.1515\)
由於outlook這個做爲劃分的話,能夠獲得最大的信息增益,因此咱們就用這個屬性做爲決策樹的根節點,把數據集分紅3個子集,而後再在每個子集中重複上面的步驟,就會獲得下面這樣的決策樹:
spa
對於有不少值得特徵,ID3是很是敏感的,而C4.5用增益率Gain ratio解決了這個問題,先定義內在價值Intrinsic Value:.net
這個公式怎麼理解呢?orm
可想而知,若是存在一個特徵,比方說一個學生的學號(每個學生的學號都不相同),若是用ID3選擇學號進行分裂,那麼必定能夠達到很是大的信息增益,可是其實這是無心義過擬合的行爲。使用C4.5的話,咱們要計算IGR,這個學號的特徵的內在價值IV是很是大的,因此IGR並不會很大,因此模型就不會選擇學號進行分裂。htm
此外。C4.5能夠處理連續值得劃分,下面,我舉例說明一下它的解決方式。假設訓練集中每一個樣本的某個屬性爲:{65, 70, 70, 70, 75, 78, 80, 80, 80, 85, 90, 90, 95, 96}。如今咱們要計算這個屬性的信息增益。咱們首先要移除重複的值並對剩下的值進行排序:{65, 70, 75, 78, 80, 85, 90, 95, 96}。接着,咱們分別求用每一個數字拆分的信息增益(好比用65作拆分:用≤65和>65≤65和>65作拆分,其它數字同理),而後找出使信息增益得到最大的拆分值。所以,C4.5算法很好地解決了不能處理具備連續值屬性的問題。blog
C4.5如何處理缺失值
C4.5對決策樹的剪枝處理:
有兩種剪枝處理方法,一個是預剪枝,一個是後剪枝,二者都是比較驗證集精度,區別在於:
分類迴歸樹Classification and Regression Trees與C4.5的算法是很是類似的,而且CART支持預測迴歸任務。而且CART構建的是二叉樹。