1.決策樹原理
決策樹算法重點就在於“決策”和“樹”這兩個概念,顧名思義決策樹是基於樹結構來進行決策的,這也恰恰是人們在遇到問題時進行問題梳理的一種很自然的處理機制。
決策樹的目標是建立分類和迴歸模型,核心目標是決策樹的生長和決策樹的修剪。
對於決策樹的生長算法有:ID3,C5.0,CART,CHAID,QUEST等;
對於決策樹的修剪方法有:預剪枝,後剪枝。
2.決策樹優缺點
優點:
- 不需要預處理,不需要提前歸一化,處理缺失值;
- 既可以處理離散值也可以處理連續值。很多算法只是專注於離散值或者連續值;
- 簡單直觀,生成的決策樹很直觀;
- 使用決策樹預測的代價是O(log2m)O(log2m)。 m爲樣本數;
- 可以處理多維度輸出的分類問題;
- 相比於神經網絡之類的黑盒分類模型,決策樹在邏輯上可以得到很好的解釋;
- 可以交叉驗證的剪枝來選擇模型,從而提高泛化能力;
- 對於異常點的容錯能力好,健壯性高。
缺點:
- 決策樹算法非常容易過擬合,導致泛化能力不強。可以通過設置節點最少樣本數量和限制決策樹深度來改進;
- 決策樹會因爲樣本發生一點點的改動,就會導致樹結構的劇烈改變。這個可以通過集成學習之類的方法解決;
- 尋找最優的決策樹是一個NP難的問題,我們一般是通過啓發式方法,容易陷入局部最優。可以通過集成學習之類的方法來改善;
- 有些比較複雜的關係,決策樹很難學習,比如異或。這個就沒有辦法了,一般這種關係可以換神經網絡分類方法來解決;
- 如果某些特徵的樣本比例過大,生成決策樹容易偏向於這些特徵。這個可以通過調節樣本權重來改善。
3.CART算法
縱使決策樹的生成算法有很多,但是scikit-learn決策樹算法類庫內部實現是使用了調優過的CART樹算法,既可以做分類,又可以做迴歸。分類迴歸樹(Classification And Regression Tree, CART)是由美國斯坦福大學和加州大學伯克利分校的佈雷曼(Breiman) 等人於1984年提出的,同年他們出版了相關專著Classification and Regression Trees。
CART算法也有樹的生成和剪枝兩部分,對於樹的生成採用的標準主要是:基尼係數(分類),方差(迴歸);對於樹的剪枝採用的標準主要是是:MCCP算法(最小代價複雜性修剪法)。對於這兩部分的理論介紹這裏不再給出,隨便找一本介紹CART樹算法的書都有相應的介紹,例如:鏈接1,鏈接2……
4.CART算法實現
scikit-learn決策樹算法類庫中,分類決策樹的類對應的是DecisionTreeClassifier,而回歸決策樹的類對應的是DecisionTreeRegressor。
對於這兩者來說,參數定義幾乎完全相同,但是意義不全相同。下面就對DecisionTreeClassifier和DecisionTreeRegressor的重要參數做一個總結,重點比較兩者參數使用的不同點和調參的注意點。
DecisionTreeClassifier
DecisionTreeClassifier(criterion=’gini’, splitter=’best’, max_depth=None,
min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0,
max_features=None, random_state=None, max_leaf_nodes=None,
min_impurity_decrease=0.0, min_impurity_split=None, class_weight=None,
presort=False)
DecisionTreeRegressor
DecisionTreeRegressor(criterion=’mse’, splitter=’best’, max_depth=None,
min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0,
max_features=None, random_state=None, max_leaf_nodes=None,
min_impurity_decrease=0.0, min_impurity_split=None, presort=False)