相關文章:
機器學習 | 目錄
監督學習 | ID3 決策樹原理及Python實現
監督學習 | ID3 & C4.5 決策樹原理
監督學習 | 決策樹之Sklearn實現
監督學習 | 決策樹之網絡搜索
本文大部分內容搬運自李航老師的《統計學習方法》[1] ,以給出決策樹算法較爲完整的定義,關於決策樹算法的 Sklearn 實現,可以參考這篇文章 。
CART 算法
分類與迴歸樹
(classification and regression tree, CART)模型由 Beriman 等人在 1984 年提出,是應用廣泛的決策樹學習方法,CART 同樣由特徵選擇、樹的生成及剪枝組成,既可以用於分類也可以用於迴歸,以下將用於分類與迴歸的樹統稱爲決策樹。
CART 是在給定輸入隨機變量 X 條件下輸出隨機變量 Y 的條件概率分佈的學習方法。CART 假設決策樹是二叉樹,內部結點特徵的取值爲“是”和“否”,左分支是取值爲“是”的分支,右分支是取值爲“否”的分支。這樣的決策樹等價於遞歸地二分每個特徵,將輸入空間即特徵空間劃分爲有限個單元,並在這些單元上確定預測的概率分佈,也就是在輸入給定的條件下輸出的條件概率分佈。
CART 算法由以下兩部組成:
(1)決策樹生成:基於訓練數據集生成決策樹,生成的決策樹要儘量大;
(2)決策樹剪枝:用驗證數據集對已生成的樹進行剪枝並選擇最優子樹,這是用損失函數最小作爲剪枝的標準。
1. CART 生成
決策樹的生成就是遞歸地構建二叉決策樹的過程。對迴歸樹
用平方誤差
最小化準則,對分類樹
用基尼指數
(Gini index)最小化準則,進行特徵選擇,生成二叉樹。
1.1 迴歸樹生成
假設 X X X 與 Y Y Y 分別是輸入和輸出變量,並且 Y Y Y 是連續變量,給定訓練數據集:
D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } D=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\} D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) }
一個迴歸樹對應着輸入空間(即特徵空間)的一個劃分以及在劃分的單元上的輸出值。假設已將輸入空間劃分爲 M M M 個單元 R 1 , R 2 , . . . , R M R_1,R_2,...,R_M R 1 , R 2 , . . . , R M 並且在每個單元 R m R_m R m 上有一個固定的輸出值 C m C_m C m ,於是迴歸樹模型可表示爲:
f ( x ) = ∑ m = 1 M c m I ( x ∈ R m ) (1) f(x)=\sum_{m=1}^M c_mI(x \in R_m) \tag{1} f ( x ) = m = 1 ∑ M c m I ( x ∈ R m ) ( 1 )
當輸入空間的劃分確定時,可以用平方誤差 ∑ x i ∈ R m ( y i − f ( x i ) ) 2 \sum_{x_i\in R_m}(y_i-f(x_i))^2 ∑ x i ∈ R m ( y i − f ( x i ) ) 2 來表示迴歸樹對於訓練數據的預測誤差,用平方誤差最小的準則求解每個單元上的最優輸出值。
因此,單元 R m R_m R m 上的 c m c_m c m 的最優值 c ^ m \hat{c}_m c ^ m 是 R m R_m R m 上所有輸入實例 x i x_i x i 對應的輸出 y i y_i y i 的均值,即:
c ^ m = a v e ( y i ∣ x i ∈ R m ) (2) \hat{c}_m = ave(y_i|x_i \in R_m) \tag{2} c ^ m = a v e ( y i ∣ x i ∈ R m ) ( 2 )
這裏採用啓發式的方法對輸入空間進行劃分:選擇第 j j j 個變量 x ( j ) x^{(j)} x ( j ) 和它取的值 s s s ,作爲切分變量(splitting variable)和切分點(splitting point),並定義兩個區域:
R 1 ( j , s ) = { x ∣ x ( j ) ≤ s } 和 R 2 ( j , s ) = { x ∣ x ( j ) > s } (3) R_1(j,s)=\{x|x^{(j)}\leq s\} \quad 和 \quad R_2(j,s)=\{x|x^{(j)}> s\} \tag{3} R 1 ( j , s ) = { x ∣ x ( j ) ≤ s } 和 R 2 ( j , s ) = { x ∣ x ( j ) > s } ( 3 )
然後尋找最優切分變量 j j j 和最優切分點 s s s :
min j [ min c j ∑ x i ∈ R 1 ( j , s ) ( y i − c 1 ) 2 + min c j ∑ x i ∈ R 2 ( j , s ) ( y i − c 2 ) 2 ] (4) \min \limits_{j}\bigg[ \min \limits_{c_j} \sum_{x_i\in R_1(j,s)}(y_i-c_1)^2 + \min \limits_{c_j} \sum_{x_i\in R_2(j,s)}(y_i-c_2)^2
\bigg] \tag{4} j min [ c j min x i ∈ R 1 ( j , s ) ∑ ( y i − c 1 ) 2 + c j min x i ∈ R 2 ( j , s ) ∑ ( y i − c 2 ) 2 ] ( 4 )
對固定輸入變量 j j j 可以找到最優切分點 s s s 。
因此有:
c ^ 1 = a v e ( y i ∣ x i ∈ R 1 ( j , s ) ) 和 c ^ 2 = a v e ( y i ∣ x i ∈ R 2 ( j , s ) ) (5) \hat{c}_1=ave(y_i|x_i\in R_1(j,s)) \quad 和 \quad \hat{c}_2=ave(y_i|x_i\in R_2(j,s)) \tag{5} c ^ 1 = a v e ( y i ∣ x i ∈ R 1 ( j , s ) ) 和 c ^ 2 = a v e ( y i ∣ x i ∈ R 2 ( j , s ) ) ( 5 )
遍歷所有輸入變量,找到最優的切分變量 j j j ,構造一個對 ( j , s ) (j,s) ( j , s ) 。依次將輸入空間劃分爲兩個區域。接着,最每個區域重複上述劃分過程,直到滿足停止條件爲止,這樣就生成一顆迴歸樹。這樣的迴歸樹通常稱爲最小二乘迴歸樹
(least squares regression tree)。
最小二乘迴歸樹生成算法
輸入 :訓練數據集 D D D ;
輸出 :迴歸樹 f ( x ) f(x) f ( x ) .
在訓練數據集所在的輸入空間中,遞歸地將每個區域劃分爲兩個子區域並決定每個子區域熵的輸出值,構建二叉決策樹;
(1)選擇最優切分變量 j j j 和最優切分點 s s s ,求解:
min j [ min c j ∑ x i ∈ R 1 ( j , s ) ( y i − c 1 ) 2 + min c j ∑ x i ∈ R 2 ( j , s ) ( y i − c 2 ) 2 ] (6) \min \limits_{j}\bigg[ \min \limits_{c_j} \sum_{x_i\in R_1(j,s)}(y_i-c_1)^2 + \min \limits_{c_j} \sum_{x_i\in R_2(j,s)}(y_i-c_2)^2
\bigg] \tag{6} j min [ c j min x i ∈ R 1 ( j , s ) ∑ ( y i − c 1 ) 2 + c j min x i ∈ R 2 ( j , s ) ∑ ( y i − c 2 ) 2 ] ( 6 )
\quad 遍歷變量 j j j ,對固定的切分變量 j j j 掃描切分點 s s s ,選擇使上式達到最小的對 ( j , s ) (j,s) ( j , s ) ;
(2)用選定的對 ( j , s ) (j,s) ( j , s ) 劃分區域並決定相應的輸出值:
R 1 ( j , s ) = { x ∣ x ( j ) ≤ s } R 2 ( j , s ) = { x ∣ x ( j ) > s } (7) R_1(j,s)=\{x|x^{(j)}\leq s\} \quad R_2(j,s)=\{x|x^{(j)}> s\} \tag{7} R 1 ( j , s ) = { x ∣ x ( j ) ≤ s } R 2 ( j , s ) = { x ∣ x ( j ) > s } ( 7 )
c ^ m = 1 N m ∑ x i ∈ R m ( j , s ) y i , x ∈ R m , m = 1 , 2 (8) \hat{c}_m=\frac{1}{N_m} \sum_{x_i \in R_m(j,s)}y_i,\quad x\in R_m,\quad m=1,2 \tag{8} c ^ m = N m 1 x i ∈ R m ( j , s ) ∑ y i , x ∈ R m , m = 1 , 2 ( 8 )
(3)繼續對兩個子區域調用步驟 (1),(2),直至滿足停止條件;
(4)將輸入空間劃分爲 M M M 個單元 R 1 , R 2 , . . . , R M R_1,R_2,...,R_M R 1 , R 2 , . . . , R M ,生成決策樹:
f ( x ) = ∑ m = 1 M c m I ( x ∈ R m ) (9) f(x)=\sum_{m=1}^M c_mI(x \in R_m) \tag{9} f ( x ) = m = 1 ∑ M c m I ( x ∈ R m ) ( 9 )
1.2 分類樹生成
分類樹用基尼指數選擇最優特徵,同時決定該特徵的最優二值切分點。
基尼指數
分類問題中,假設有 K K K 個類,樣本點屬於第 k k k 類的概率爲 p k p_k p k ,則概率分佈的基尼指數定義爲:
G i n i ( p ) = ∑ k = 1 K p k ( 1 − p k ) = 1 − ∑ k = 1 K p k 2 (10) Gini(p)=\sum_{k=1}^Kp_k(1-p_k)=1-\sum_{k=1}^Kp_k^2 \tag{10} G i n i ( p ) = k = 1 ∑ K p k ( 1 − p k ) = 1 − k = 1 ∑ K p k 2 ( 1 0 )
對於二類分類問題,若樣本點屬於第 1 個類的概率是 p p p ,則概率分佈的基尼指數爲:
G i n i ( p ) = 2 p ( 1 − p ) (11) Gini(p)=2p(1-p) \tag{11} G i n i ( p ) = 2 p ( 1 − p ) ( 1 1 )
對於給定的樣本集合 D D D ,其基尼指數爲:
G i n i ( D ) = 1 − ∑ k = 1 K ( ∣ C k ∣ ∣ D ∣ ) 2 (12) Gini(D)=1-\sum_{k=1}^K\bigg(\frac{|C_k|}{|D|} \bigg)^2 \tag{12} G i n i ( D ) = 1 − k = 1 ∑ K ( ∣ D ∣ ∣ C k ∣ ) 2 ( 1 2 )
這裏,C k C_k C k 是 D D D 中屬於第 k k k 類的樣本子集,K K K 是類的個數。
如果樣本集合 D D D 根據特徵 A A A 是否取某一可能值 α \alpha α 被分割成 D 1 D_1 D 1 和 D 2 D_2 D 2 來那個部分,即:
D 1 = { ( x , y ) ∈ D ∣ A ( x ) = a } , D 2 = D − D 1 (13) D_1=\{(x,y)\in D|A(x)=a\}, \quad D_2=D-D_1 \tag{13} D 1 = { ( x , y ) ∈ D ∣ A ( x ) = a } , D 2 = D − D 1 ( 1 3 )
則在特徵 A A A 的條件下,集合 D D D 的基尼指數定義爲:
G i n i ( D , A ) = ∣ D 1 ∣ ∣ D ∣ G i n i ( D 1 ) + ∣ D 2 ∣ ∣ D ∣ G i n i ( D 2 ) (14) Gini(D,A)=\frac{|D_1|}{|D|}Gini(D_1)+\frac{|D_2|}{|D|}Gini(D_2) \tag{14} G i n i ( D , A ) = ∣ D ∣ ∣ D 1 ∣ G i n i ( D 1 ) + ∣ D ∣ ∣ D 2 ∣ G i n i ( D 2 ) ( 1 4 )
基尼指數 G i n i ( D ) Gini(D) G i n i ( D ) 表示集合 D D D 的不確定性,基尼指數值越大,樣本集合的不確定性也就越大 ,這一點與熵相似。
CART 生成算法
輸入 :訓練數據集 D D D ,停止計算的條件;
輸出 :CART 分類決策樹。
根據訓練數據集,從根結點開始,遞歸地對每個結點進行以下操作,構建二叉決策樹:
(1)設結點的訓練數據集爲 D D D ,計算現有特徵對該數據集的基尼指數。此時,對每一個特徵 A A A ,對其可能取的每個值 a a a ,根據樣本點對 A = a A=a A = a 的測試爲“是”或“否”將 D D D 分割成 D 1 D_1 D 1 和 D 2 D_2 D 2 兩部分,利用式 (14) 計算 A = a A=a A = a 時的基尼指數;
(2)在所有可能的特徵 A A A 以及它們所有可能的切分點 a a a 中,選擇基尼指數最小的特徵及其對應的切分點作爲最優特徵與最優切分點。依最優特徵與最優切分點,從現生成兩個子結點,將訓練數據集依特徵分配到兩個子結點中去;
(3)對兩個子結點遞歸地調用 (1) ,(2),直到滿足停止條件;
(4)生成 CART 決策樹。
算法停止計算的條件是結點中的樣本個數小於預定閾值,或樣本集的基尼指數小於預定閾值(樣本基本屬於同一類),或者沒有更多特徵。
參考文獻
[1] 李航. 統計學習方法[M]. 北京: 清華大學出版社, 2012: 55-66.