決策樹
前言
參考了大佬的博客:博客地址
適合分析離散數據,若是連續數據需要轉換成離散數據再做分析(比如圖中的年齡)

結構
決策樹由節點和有向邊組成;節點可分為內部節點和葉節點
- 內部節點:特征
- 葉節點:類別
- 有向邊:特征的取值范圍

在用決策樹進行分類時,首先從根結點出發,對實例在該結點的對應屬性進行測試,接著會根據測試結果,將實例分配到其子結點;然后,在子結點繼續執行這一流程,如此遞歸地對實例進行測試并分配,直至到達葉結點;最終,該實例將被分類到葉結點所指示的結果中
在決策樹中,若把每個內部結點視為一個條件,每對結點之間的有向邊視為一個選項,則從根結點到葉結點的每一條路徑都可以看做是一個規則,而葉結點則對應著在指定規則下的結論。這樣的規則具有互斥性和完備性,從根結點到葉結點的每一條路徑代表了一類實例,并且這個實例只能在這條路徑上。從這個角度來看,決策樹相當于是一個 if-then 的規則集合,因此它具有非常好的可解釋性
熵
作用
表示隨機變量的不確定度;對于決策樹的節點來說,理想狀態是節點特征對樣本進行分類后,能最大程度降低樣本的熵;可以這樣理解,構建決策樹就是對特征進行層次選取,而衡量特征選取的合理指標,就是熵
定義
對于在有限范圍內的離散隨機變量X,概率分布為:P(X=xi)=pi,i=1,2,…,n對于在有限范圍內的離散隨機變量X,概率分布為:\\ P(X=x_i) = p_i,i=1,2,\dots,n 對于在有限范圍內的離散隨機變量X,概率分布為:P(X=xi?)=pi?,i=1,2,…,n
我們假設一個樣本中有k個類別,比如不同顏色的球
k=4pblue=27,pyellow=27,pred=27,pgreen=17k=4\\ p_{blue}=\frac{2}{7},p_{yellow}=\frac{2}{7},p_{red}=\frac{2}{7},p_{green}=\frac{1}{7} k=4pblue?=72?,pyellow?=72?,pred?=72?,pgreen?=71?
則離散隨機變量X的熵定義為
H(X)=?∑i=1kpilogpi=?∑i=1k∣Ci∣∣D∣log∣Ci∣∣D∣Ci表示第i類樣本,D表示整個數據集H(X) = -\sum_{i=1}^{k}p_ilogp_i=-\sum_{i=1}^{k}\frac{|C_i|}{|D|}log\frac{|C_i|}{|D|}\\ C_i表示第i類樣本,D表示整個數據集 H(X)=?i=1∑k?pi?logpi?=?i=1∑k?∣D∣∣Ci?∣?log∣D∣∣Ci?∣?Ci?表示第i類樣本,D表示整個數據集
則X的熵僅與其分布有關,而與取值無關,H(X)也可以寫成H§
pi∈[0,1],logpi∈(?∞,0],?logpi∈[0,+∞)p_i \in [0,1],logp_i \in (-∞,0],-logp_i\in [0,+∞) pi?∈[0,1],logpi?∈(?∞,0],?logpi?∈[0,+∞)
當k很大時,H(X)也會變得很大
條件熵
引入
以天氣為例,晴天為A類,陰天為B類,雨天為C類;他們都有k=2個類別,即是/否
H(XA)=?∑i=12pilogpi=?(12log12+12log12)=log2H(XB)=?∑i=12pilogpi=?(1log1+log0)=0H(XC)=?∑i=12pilogpi=?(0log0+1log1)=0H(X_A)=-\sum_{i=1}^{2}p_ilogp_i = -(\frac{1}{2}log\frac{1}{2}+\frac{1}{2}log\frac{1}{2})=log2\\ H(X_B)=-\sum_{i=1}^{2}p_ilogp_i=-(1log1+log0) = 0\\ H(X_C)=-\sum_{i=1}^{2}p_ilogp_i=-(0log0+1log1)=0\\ H(XA?)=?i=1∑2?pi?logpi?=?(21?log21?+21?log21?)=log2H(XB?)=?i=1∑2?pi?logpi?=?(1log1+log0)=0H(XC?)=?i=1∑2?pi?logpi?=?(0log0+1log1)=0
整體天氣系統的熵
P(XA)=814,P(XB)=314,P(XC)=314H(X天氣)=814×H(XA)+314×H(XB)+314×H(XC)=47log2P(X_A)=\frac{8}{14},P(X_B) = \frac{3}{14},P(X_C) = \frac{3}{14}\\ H(X_{天氣}) = \frac{8}{14}\times H(X_A)+\frac{3}{14}\times H(X_B)+\frac{3}{14}\times H(X_C)=\frac{4}{7}log2 P(XA?)=148?,P(XB?)=143?,P(XC?)=143?H(X天氣?)=148?×H(XA?)+143?×H(XB?)+143?×H(XC?)=74?log2
定義
上面的例子其實就是在求條件熵
概率統計中條件概率公式:P(A∣B)=P(AB)P(B)對于隨機變量(X,Y),其聯合分布P(X=xi,Y=yj)=pij概率統計中條件概率公式:P(A|B) = \frac{P(AB)}{P(B)}\\ 對于隨機變量(X,Y),其聯合分布P(X=x_i,Y=y_j)=p_{ij} 概率統計中條件概率公式:P(A∣B)=P(B)P(AB)?對于隨機變量(X,Y),其聯合分布P(X=xi?,Y=yj?)=pij?
H(Y∣X)=∑i=1kpiH(Y∣X=xi)H(Y∣X):在X條件下的熵pi:P(X=xi)H(Y|X) = \sum_{i=1}^{k}p_iH(Y|X=x_i)\\ H(Y|X):在X條件下的熵\\ p_i:P(X=x_i)\\ H(Y∣X)=i=1∑k?pi?H(Y∣X=xi?)H(Y∣X):在X條件下的熵pi?:P(X=xi?)
劃分選擇
信息增益
ID3算法選用的評估標準
g(D,X)=H(D)?H(D∣X)H(D∣X)=∑i=1k∣Ci∣∣D∣H(X=xi)g(D,X)為信息增益,表示特征X使數據集D不確定性的減少程度g(D,X) = H(D)-H(D|X) \\ H(D|X)=\sum_{i=1}^{k}\frac{|C_i|}{|D|}H(X=x_i)\\ g(D,X)為信息增益,表示特征X使數據集D不確定性的減少程度 g(D,X)=H(D)?H(D∣X)H(D∣X)=i=1∑k?∣D∣∣Ci?∣?H(X=xi?)g(D,X)為信息增益,表示特征X使數據集D不確定性的減少程度
選擇根節點
將使信息增益G(D,X)最大的特征X作為根節點
信息增益率
C4.5算法選用的評估標準
為什么引入信息增益率?
以信息增益作為標準時,會偏向于選擇取值較多的特征;比如給定編號與活動是否舉辦,那么1個編號一定只對應1個是/否,編號必然是最優的特征;但是編號對于類別劃分沒有幫助,所以我們需要引入一個新的概念-信息增益率
信息增益率𝑔𝑅(𝐷,𝑋)定義為其信息增益𝑔(𝐷,𝑋)與數據集𝐷在特征𝑋上值的熵𝐻𝑋(𝐷)之比HX(D)=?∑i=1k∣Di∣∣D∣log∣Di∣∣D∣∣D∣:整個數據集樣本數,∣Di∣:第i類的樣本數gR(D,X)=g(D,X)HX(D)信息增益率 𝑔_𝑅(𝐷, 𝑋) 定義為其信息增益 𝑔(𝐷, 𝑋) 與數據集 𝐷 在特征 𝑋 上值的熵 𝐻_𝑋(𝐷) 之比\\ H_X(D) = -\sum_{i=1}^{k}\frac{|D_i|}{|D|}log\frac{|D_i|}{|D|}\\ |D|:整個數據集樣本數,|D_i|:第i類的樣本數\\ g_R(D,X) = \frac{g(D,X)}{H_X(D)}\\ 信息增益率gR?(D,X)定義為其信息增益g(D,X)與數據集D在特征X上值的熵HX?(D)之比HX?(D)=?i=1∑k?∣D∣∣Di?∣?log∣D∣∣Di?∣?∣D∣:整個數據集樣本數,∣Di?∣:第i類的樣本數gR?(D,X)=HX?(D)g(D,X)?
為什么信息增益率能降低偏向于選擇取值較多的特征的影響?
當樣本數量|D|增加后,|Di|/|D|降低,取對數再取負以后,H_X(D)就增大,信息增益率就降低
基尼系數
CART算法選用的評估標準
基尼系數代表了模型的不純度,基尼系數越小,則不純度越低,特征越好
在分類問題中,假設有k個類別,第i個類別概率為pi,則基尼系數為
Gini(p)=∑i=1kpi(1?pi)=∑i=1kpi?∑i=1kpi2=1?∑i=1kpi2Gini(p) = \sum_{i=1}^{k}p_i(1-p_i) = \sum_{i=1}^{k}p_i-\sum_{i=1}^{k}p_i^2=1-\sum_{i=1}^{k}p_i^2 Gini(p)=i=1∑k?pi?(1?pi?)=i=1∑k?pi??i=1∑k?pi2?=1?i=1∑k?pi2?
對于數據集D,假設有k個類別,第i個類別的數量為C_i,則數據集D的基尼系數為
Gini(D)=∑i=1k∣Ci∣∣D∣(1?∣Ci∣∣D∣)=1?∑i=1k(∣Ci∣∣D∣)2Gini(D) = \sum_{i=1}^{k}\frac{|C_i|}{|D|}(1-\frac{|C_i|}{|D|}) = 1-\sum_{i=1}^{k}(\frac{|C_i|}{|D|})^2 Gini(D)=i=1∑k?∣D∣∣Ci?∣?(1?∣D∣∣Ci?∣?)=1?i=1∑k?(∣D∣∣Ci?∣?)2
基尼系數其實表示了一個數據集中分類錯誤的平均概率
如果數據集根據X的取值分為D1,D2,…,DkGini(D,X)=∑i=1k∣Ci∣∣D∣Gini(Di)Gini(D,X)表示數據集D根據特征X劃分后的不確定性如果數據集根據X的取值分為{D_1,D_2,\dots,D_k} \\ Gini(D,X) = \sum_{i=1}^k\frac{|C_i|}{|D|}Gini(D_i) \\ Gini(D,X)表示數據集D根據特征X劃分后的不確定性 如果數據集根據X的取值分為D1?,D2?,…,Dk?Gini(D,X)=i=1∑k?∣D∣∣Ci?∣?Gini(Di?)Gini(D,X)表示數據集D根據特征X劃分后的不確定性
觀察公式,其實可以發現面對編號特征時,基尼系數Gini(D,X)會是0
基尼增益
和信息增益類似
G(D,X)=Gini(D)?Gini(D,X)G(D,X) = Gini(D)-Gini(D,X) G(D,X)=Gini(D)?Gini(D,X)
采用越好的特征進行劃分,得到的基尼增益也越大
基尼仍會認為編號是一個比較優的特征(面對編號特征時,基尼系數Gini(D,X)會是0)
基尼增益率
基尼增益率GR(D,X)可以表示為G(D,X)與數據集D在特征X上的取值個數之比GR(D,X)=G(D,X)∣DX∣基尼增益率G_R(D,X)可以表示為G(D,X)與數據集D在特征X上的取值個數之比\\ G_R(D,X) = \frac{G(D,X)}{|D_X|} 基尼增益率GR?(D,X)可以表示為G(D,X)與數據集D在特征X上的取值個數之比GR?(D,X)=∣DX?∣G(D,X)?
處理連續值
比如有長度為n的連續數據a1,a2,…,an比如有長度為n的連續數據a_1,a_2,\dots,a_n 比如有長度為n的連續數據a1?,a2?,…,an?
對其離散化的步驟:
-
排序
-
再任取相鄰點的中位點作為劃分點
?=ai+ai+12,1≤i≤n?1一共產生n?1個中位點\phi = \frac{a_i+a_{i+1}}{2},1 \leq i \leq n-1 \\ 一共產生n-1個中位點 ?=2ai?+ai+1??,1≤i≤n?1一共產生n?1個中位點 -
對這n-1個中位點劃分出的數據集進行計算熵,熵最小的就是最優劃分點
剪枝
對于決策樹而言,如果不斷向下劃分直至葉子節點的熵為0,理論上我們區分開了所有的類別。但是這樣很容易過擬合(劃分太多次相當于太多特征導致模型太復雜),因此我們需要進行剪枝
剪枝策略:
- 預剪枝:邊構建決策樹邊剪枝
- 后剪枝:決策樹構建完之后再剪枝
正則化/預剪枝
預剪枝策略可以通過限制決策樹深度,葉子節點個數,葉子節點含樣本數以及信息增量完成
-
限制決策樹高度
設定深度限度值d,當深度達到d時,就不再構建決策樹(節點不再繼續劃分數據),把當前節點作為葉子節點
-
限制葉子節點個數
當達到預設的葉子節點值n時,即使當前節點可以再繼續往下劃分,也不繼續劃分了,而是作為葉子節點
-
限制葉子節點樣本數
限制葉子節點的樣本數不小于n,如果一個節點下所有分支的葉子節點包含的樣本數都小于n,那么需要對這個分支進行剪枝
-
限制最低信息增益
后剪枝
衡量標準
Lα=∑i=1n(Gini(Ti)×∣Ti∣)+α∣Tleaf∣n是葉子節點數Lα表示最終損失(越小越好)Gini(T)表示當前節點的基尼系數∣T∣表示當前節點的樣本數Tleaf表示當前節點被劃分后產生的葉子節點個數α表示偏好系數,類似于正則化參數λ,越大表示對劃分葉子節點懲罰越重L_{\alpha}=\sum_{i=1}^{n} (Gini(T_i)\times|T_i|)+\alpha|T_{leaf}| \\ n是葉子節點數\\ L_{\alpha}表示最終損失(越小越好) \\ Gini(T)表示當前節點的基尼系數 \\ |T|表示當前節點的樣本數 \\ T_{leaf}表示當前節點被劃分后產生的葉子節點個數\\ \alpha表示偏好系數,類似于正則化參數λ,越大表示對劃分葉子節點懲罰越重\\ Lα?=i=1∑n?(Gini(Ti?)×∣Ti?∣)+α∣Tleaf?∣n是葉子節點數Lα?表示最終損失(越小越好)Gini(T)表示當前節點的基尼系數∣T∣表示當前節點的樣本數Tleaf?表示當前節點被劃分后產生的葉子節點個數α表示偏好系數,類似于正則化參數λ,越大表示對劃分葉子節點懲罰越重