數據挖掘十大算法之決策樹詳解(2)

在2006年12月召開的 IEEE 數據挖掘國際會議上(ICDM, International Conference on Data Mining),與會的各位專家選出了當時的十大數據挖掘算法( top 10 data mining algorithms ),能夠參見文獻【1】。本博客已經介紹過的位列十大算法之中的算法包括:html

由於原文較長,我嘗試把它們分散成幾篇。本文是決策樹模型系列中的第二篇,但願你在閱讀本文以前已經對《數據挖掘十大算法之決策樹詳解(1)》中以內容有較深刻理解。決策樹模型是一類算法的集合,在數據挖掘十大算法中,具體的決策樹算法佔有兩席位置,即C4.5和CART算法,本文都會介紹到它們。node

歡迎關注白馬負金羈的博客 http://blog.csdn.net/baimafujinji,爲保證公式、圖表得以正確顯示,強烈建議你從該地址上查看原版博文。本博客主要關注方向包括:數字圖像處理、算法設計與分析、數據結構、機器學習、數據挖掘、統計分析方法、天然語言處理。算法


ID3算法

ID3和C4.5都是由澳大利亞計算機科學家Ross Quinlan開發的決策樹構建算法,其中C4.5是在ID3上發展而來的。下面的算法描述主要出自文獻【3】。數據結構

ID3算法的核心是在決策樹各個結點上應用信息增益準則選擇特徵,遞歸地構建決策樹。具體方法是:從根結點(root node)開始,對結點計算全部可能的特徵的信息增益,選擇信息增益最大的特徵做爲結點的特徵,由該特徵的不一樣取值創建子結點;再對子結點遞歸地調用以上方法,構建決策樹;直到全部特徵的信息增益均很小或沒有特徵能夠選擇爲止。最後獲得一棵決策樹。ID3至關於用極大似然法進行機率模型的選擇。 下面咱們給出一個更加正式的ID3算法的描述:機器學習

輸入:訓練數據集D,特徵集A,閾值ϵ; 
輸出:決策樹T
函數

  1. D中全部實例屬於同一類Ck,則T爲單結點樹,並將類Ck做爲該結點的類標記,返回T工具

  2. A=,則T爲單結點樹,並將D中實例數最大的類Ck做爲該結點的類標記,返回T;學習

  3. 不然,計算A中各特徵對D的信息增益,選擇信息增益最大的特徵Ag; 
    (1) 若是Ag的信息增益小於閾值ϵ,則置T爲單結點樹,並將D中實例數最大的類Ck做爲該結點的類標記,返回T; 
    (2) 不然,對Ag的每一可能值ai,依Ag=aiD分割爲若干非空子集Di,將Di中實例數最大的類做爲標記,構建子結點,由結點及其子結點構成樹T,返回T
    測試

  4. 對第i個子結點,以Di爲訓練集,以A{Ag}爲特徵集,遞歸地調用步驟(1)~(3),獲得子樹Ti,返回Ti大數據

下面咱們來看一個具體的例子,咱們的任務是根據天氣狀況計劃是否要外出打球: 


 


首先來算一下根節點的熵: 

Entropy(PlayBall)=Entropy(5,9)=Engropy(0.36,0.64)=(0.36log20.36)(0.64log20.64)=0.94


而後再分別計算每一種劃分的信息熵,比方說咱們選擇Outlook這個特徵來作劃分,那麼獲得的信息熵爲 


 


據此可計算採用Outlook這個特徵來作劃分時的信息增益爲 

G(PlayBall,Outlook)=E(PlayBall)E(PlayBall,Outlook)=0.940.693=0.247


同理,選用其餘劃分時所獲得之信息增益以下: 


 


取其中具備最大信息增益的特徵來做爲劃分的標準,而後你會發現其中一個分支的熵爲零(時間中閾值能夠設定來懲罰過擬合),因此把它變成葉子,即得 


 


對於其餘熵不爲零(或者大於預先設定的閾值)的分支,那麼則須要作進一步的劃分 


 


根據上述的規則繼續遞歸地執行下去。最終,咱們獲得了以下一棵決策樹。 


 

 


C4.5算法

C4.5是2006年國際數據挖掘大會票選出來的十大數據挖掘算法之首,可見它應該是很是powerful的!不只如此,事實上,C4.5的執行也至關的straightforward。

C4.5算法與ID3算法類似,C4.5算法是由ID3算法演進而來的。C4.5在生成的過程當中,用信息增益比來選擇特徵。下面咱們給出一個更加正式的C4.5算法的描述:

輸入:訓練數據集D,特徵集A,閾值ϵ; 
輸出:決策樹T

  1. 若是D中全部實例屬於同一類Ck,則置T爲單結點樹,並將Ck做爲該結點的類,返回T
  2. 若是A=,則置T爲單結點樹,並將D中實例數最大的類Ck做爲該結點的類,返回T
  3. 不然,計算A中各特徵對D的信息增益比,選擇信息增益比最大的特徵Ag; 
    (1) 若是Ag的信息增益比小於閾值ϵ,則置T爲單結點樹,並將D中實例數最大的類Ck做爲該結點的類,返回T; 
    (2) 不然,對Ag的每一可能值ai,依Ag=aiD分割爲若干非空子集Di,將Di中實例數最大的類做爲標記,構建子結點,由結點及其子結點構成樹T,返回T
  4. 對結點i,以Di爲訓練集,以A{Ag}爲特徵集,遞歸地調用步驟(1)~(3),獲得子樹Ti,返回Ti

How to do it in practice?

易見,C4.5跟ID3的執行步驟很是相似,只是在劃分時所採用的準則不一樣。咱們這裏再也不贅述。可是這裏能夠來看看在實際的數據分析中,該如何操做。咱們所使用的數據是以下所示的一個csv文件,文件內容同本文最初給出的Play Ball例子中的數據是徹底一致的。 


 


本博客以前介紹的實例中,已經分別演示過用R語言、Python,或者Matlab進行數據挖掘的方法,這裏將演示另一種經常使用的數據挖掘工具Weka的使用。Weka是由新西蘭懷卡託大學開發的一款基於Java的免費的數據挖掘工具,你能夠從下面的連接中下載獲得它:

 

使用Weka進行數據挖掘是很是容易的,你再也不須要像R語言或者MATLAB那樣編寫代碼或者調用函數。基於GUI界面,在Weka中你只須要點點鼠標便可!首先咱們單擊「Explorer」按鈕來打開操做的主界面,以下圖所示。 


 


而後咱們單擊「Open File…」,並從相應的目錄下選擇你要用來進行模型訓練的數據文件,以下圖所示。 


 


Weka提供了很是易於操做的各類數據預處理功能,你能夠本身嘗試探索一下。注意到屬性Day其實在構建決策樹時是不須要的,我選中該屬性,並將其移除,以下圖所示。 


 


完成數據預處理後,咱們就能夠開始進行模型訓練了。由於咱們是要創建決策樹,因此選擇「Classify」選項卡,而後在「Classifier」中選擇J48。你能夠能會疑惑咱們不是要使用C4.5算法創建決策樹嗎?爲何要選擇J48呢?其實J48是一個開源的C4.5的Java實現版本(J48 is an open source Java implementation of the C4.5 algorithm),因此J48就是C4.5。 


 


而後你能夠自定義的選擇「Test options」中的一些測試選項,這裏咱們不作過多說明。而後單擊「Start」按鈕,Weka就爲咱們創建了一棵決策樹,你能夠從「Classifier output」欄目中看到模型訓練的一些結果。可是對於決策樹而言,你能夠以爲文字看起來還不夠直觀。沒關係,Weka還爲你提供了可視化的決策樹建模呈現。爲此,你須要右鍵單擊剛剛訓練好的模型,而後從右鍵菜單中選擇「Visualize tree」,以下圖所示。 


 


最後咱們獲得了一棵與前面例子中相一致的決策樹,以下圖所示。 


 

 

在後續的決策樹系列文章中,咱們將繼續深刻探討CART算法等相關話題。

(未完,待續…)


參考文獻

【1】Wu, X., Kumar, V., Quinlan, J.R., Ghosh, J., Yang, Q., Motoda, H., McLachlan, G.J., Ng, A., Liu, B., Philip, S.Y. and Zhou, Z.H., 2008. Top 10 algorithms in data mining. Knowledge and information systems, 14(1), pp.1-37. (http://www.cs.uvm.edu/~icdm/algorithms/10Algorithms-08.pdf) 
【2】Pang-Ning Tan, Michael Steinbach, Vipin Kumar, 數據挖掘導論,人民郵電出版社 
【3】李航,統計學習方法,清華大學出版社 
【4】http://www.saedsayad.com/decision_tree.htm 
【5】https://www.cise.ufl.edu/~ddd/cap6635/Fall-97/Short-papers/2.htm

若是你對機器學習和數據挖掘感興趣,你還能夠參考個人高能資源帖: 
【6】機器學習與數據挖掘網上資源蒐羅 
【7】機器學習與數據挖掘的學習路線圖

相關文章
相關標籤/搜索