一。介紹
決策樹是一種分類算法。它的算法思想是:根據單一特征對類別的重要性,將特征進行“排序”;然后分類的時候,用這些“排序”的特征,高效的分類。
二。算法步驟
1,特征選擇
? ? ? ?首先,對于特征選擇下面介紹三種最普通的方法,它們有許多共同之處,差別在于對某一特征重要性的度量不一樣。
? ? ? ? 前兩者的度量跟熵有非常密切的關系,那么什么是熵呢?——熵是對不確定性的度量。對于一件事情,如果它是確定性事件,則熵為0;如果對于這件事情,每種可能出現的概率相同,則熵達到最大。具體的公式見上面。
? ? ? ? 計算技巧:由于要計算的是信息增益最大,在劃分前信息總量infobeforeSplit()一定的情況下,我們完全可以直接求劃分后信息量最小的特性即可。
1.1 ID3
以信息增益為基礎,進行特征選擇。其思想是:對于某一個特征,在知道該特征后,根據類別的信息量減少的量,對特征進行排序。
1.2 C4.5
? ? ? ?如果某一個特征只含一個純結點,這樣決策樹在選擇屬性時,將偏向于選擇該屬性,但這肯定是不正確(導致過擬合)的。因此有必要使用一種更好的方法,那就是C4.5中使用的信息增益率。
其考慮了分支數量和尺寸的因素,使用稱為內在信息的概念?!?】
? ? ? 內在信息,可簡單地理解為表示信息分支所需要的信息量。
? ? ? 實際上可以看出,屬性的重要性會隨著其內在信息(Intrinsic Information)的增大而減小。信息增益率作為一種補償(Compensate)措施來解決信息增益所存在的問題,但是它也有可能導致過分補償,而選擇那些內在信息很小的屬性,這一點可以嘗試:首先,僅考慮那些信息增益超過平均值的屬性,其次再比較信息增益。
1.3 CART
2,剪枝
? ? ? ? 假如原本有1000個特征,在經過特征選擇后,就是1000個特征的排序。但是實際上,后面的很多特征是沒什么參考價值的,但是卻還會影響分類的結果。所以要使用剪枝,來避免過擬合。
? ? ? ? 剪枝分為預剪枝和后剪枝。預剪枝就是一邊生成決策樹一邊將沒用的枝剪掉;后剪枝是生成一整顆完整數之后再剪枝。
前者好處是效率高,壞處是沒能從全局的角度來剪枝,容易導致剪枝過度;(該剪枝方法盡管不是統計有效的,但是在實踐中有效?!?】)
后者的好處是從全局最優的思路下進行剪枝,壞處是效率低、數據量少時易過擬合。
2.1 預剪枝
在構造決策樹的同時進行剪枝。所有決策樹的構建方法,都是在無法進一步降低熵的情況下才會停止創建分支的過程,為了避免過擬合,可以設定一個閾值,熵減小的數量小于這個閾值,即使還可以繼續降低熵,也停止繼續創建分支。但是這種方法實際中的效果并不好?!?】
2.2 后剪枝
REP的步驟:
1,從底到頂,試著刪除某一個節點下的子樹,給該節點最大概率的分類;2,如果刪除后沒有降低總體的準確率,則刪除該節點的子樹。3,然后往樹的跟節點方向繼續刪除,直到都不能刪除。
其它如Minimum Error Pruning(MEP),Critical Value Pruning(CVP),Optimal Pruning(OPP),Cost-Sensitive Decision Tree Pruning(CSDTP)、PEP等方法。【2】反正我沒看,具體要用再看。
3,分類預測
通過上面的兩步,已經確定了最終用于分類的決策樹。或者你還在郁悶,有了這樣的一顆樹,又怎么進行分類呢??
實際上,這棵樹從根節點到葉子的每一根樹枝都有一個概率,然后不斷地往葉子方向計算其概率,就可以得到每個葉子下的概率,而葉子對應的就是類別。
三。優缺點
優點:這個算法總的來說,還是基于一定的統計學意義,結合信息量的知識(當然啦,像貝葉斯等其他分類算法也都有這兩點,而且也很偏重這兩點)進行分類。這類算法不涉及迭代優化等,所以計算復雜度不高,效率快。
這個算法其實也是有一個致命的缺點:只能對離散的特征進行處理,對連續特征效果不好(雖然連續的特征也能轉變為離散的特征,但是決策樹受這些處理的影響很大,分類效果就差了),此外,對于特征中離散值的個數也有一定的限制(其實主要是個數多了,每個值對應的數據量就少了),容易出現純節點,影響特征選擇的效果,最終影響分類的結果。
四。參考文章:
【1】http://blog.csdn.net/cyningsun/article/details/8735169
【2】數據挖掘十大經典算法 https://wizardforcel.gitbooks.io/dm-algo-top10/content/cart.html
【3】http://www.lxweimin.com/p/794d08199e5e