一、決策樹前置知識準備
1.1 信息熵
信息熵也叫香農熵,其計算公式爲:
1.2 條件熵
在給定X的條件下,所有的不同x值的條件下Y的熵的平均值叫做條件熵。
計算公式爲:
1.3 純度度量的公式(值越大越不純)
1)信息熵
2)基尼係數
3)錯誤率
二、決策樹
sklearn.tree.
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)
2.1 決策樹的構建方法:
決策樹的構建是決策樹算法的重點。在KNN中我們講過KD-Tree的構建,決策樹的構建方法與此類似。不同的是KD-Tree中的劃分方法是具有最大方差的特徵進行劃分。決策樹的劃分指標是要求劃分的葉子節點的數據足夠的“純”。因此,在決策樹(分類)中,我們使用其他的劃分指標,如ID3的信息增益,C4.5的信息增益率,CART中的基尼增益率劃分等。
在迴歸樹中,我們使用MSE或者MAE作爲數據劃分指標,最後的迴歸值爲待測數據點所在的葉子節點的數據點的樣本平均值。
決策樹的劃分是一種“貪心”的劃分,只考慮當前劃分的特徵能否使得數據足夠的純,不考慮最終的結果,它是不能夠回溯的。
具體的構建方法如下:
1)計算每個特徵的“純”度值的劃分指標(就是上面提到的信息增益、信息增益率、基尼增益率等)的值。
2)選擇“純”度較低的特徵(也就是最優的劃分特徵)進行數據劃分,得到相應的子節點。
3)重複上面兩個步驟,繼續劃分,直到達到停止條件則停止構建。
決策樹劃分的停止條件主要有:
1)每個葉子節點只有一種類型的時候則停止構建
2)決策樹的層數、迭代次數或者節點中的數據點的個數少於給定閾值,則停止構建。
考慮到數據點較多的情況下按照停止條件1構建得到的樹深度過大(會出現過擬合問題),所以一般採用停止條件2來構建決策樹。
2.2 決策樹常見的幾種算法
1) ID3算法
2) C4.5算法(剪枝操作)
3) CART算法(二叉樹,也是最常用的一種)
三種算法的基本區別就是數據分割的標準不同,ID3的信息增益,C4.5的信息增益率,CART中的基尼增益率劃分。此外,ID3只能夠用於離散數據的處理;C4.5可以處理連續數據點;CART爲分類迴歸樹且必須爲二叉樹。
2.3 決策樹算法效果評估
決策樹算法效果評估方法和一般算法一樣,也採用混淆矩陣進行計算準確率、召回率、精確率等指標。
此外,決策樹還可以採用葉子節點的純度值進行效果評估,值越小效果越好。即:
其中leaf表示葉子節點的總個數,Dt表示葉子節點中的數據點個數,D表示數據點總個數,H(t)表示“純”度信息。
2.4 決策樹的特徵選擇(feature_importances)
在決策樹構建的過程中,我們將信息增益率較大的特徵首先進行分割,因此我們認爲越是在決策樹上層的特徵具有越強的作用。所以我們可以適用決策樹進行特徵選擇的操作。
在sklearn的API中,我們可以運用feature_importances參數輸出各個特徵的重要性程度值。值越大表示特徵越重要,反之亦然。
三、決策樹的剪枝操作
在我們的決策樹構建過程中,我們設置停止條件如定義決策樹的深度等方法提前結束決策樹的構建的方法叫做前置剪枝。
在我們的決策樹構建過程中,我們首先建立好決策樹,然後根據一定的規則,逐漸剪除葉子節點,直至最後的根節點,將每次剪枝後的模型作爲一棵決策樹。然後,對這n棵樹進行模型訓練測試,選擇最優的樹作爲最終的決策樹模型。這個過程叫做後置剪枝。
不管是前置剪枝,還是後置剪枝都是決策樹算法最簡單、最有用的優化方法。
剪枝的指標:剪枝係數α
在剪枝過程中,我們認爲葉子節點中的數據點個數越多,決策樹越複雜,剪枝後的loss值越大。
這裏重新定義新的loss值爲:,其中leaf爲葉子節點數
這裏我們希望剪枝前後的loss值不變,因此當時,得到剪枝係數α的求解公式爲:
其中,表示剪枝後的損失函數值,表示剪枝前的損失函數值,表示剪枝前的葉子節點數。
我們希望剪枝後的模型損失函數最小