決策樹的目標是從一組樣本數據中,根據不同的特征和屬性,建立一棵樹形的分類結構。
決策樹的學習本質上是從訓練集中歸納出一組分類規則,得到與數據集矛盾較小的決策樹,同時具有很好的泛化能力。決策樹學習的損失函數通常是正則化的極大似然函數,通常采用啟發式方法,近似求解這一最優化問題。
算法原理
ID3-最大信息增益
對於樣本集合D,類別數為K,數據集D的經驗熵表示為:
其中\(C_k\)是樣本集合\(D\)中屬於第\(k\)類的樣本子集,\(|C_k|\)表示該子集的元素個數,\(|D|\)表示元素集合的元素個數。
某個特征\(A\)對於數據集\(D\)的經驗條件熵\(H(D|A)\)為
其中\(D_i\)表示\(D\)中特征\(A\)取第\(i\)個值的樣本子集。
信息增益\(g(D,A)\)為:
C4.5-最大信息增益比
信息增益比為:
其中,
CART-最小基尼指數(Gini)
Gini描述的是數據的純度,與信息熵含義類似
CART樹在每一次迭代中選擇基尼指數最小的特征及其對應的切分點進行分類。與ID3、C4.5不同的是,CART時一顆二叉樹,采用二元切割法,每一步將數據按特征A的取值切成兩份,分別進入左右子樹。特征A的Gini指數定義為:
聯系與比較
ID3傾向於取值較多的特征,因為信息增益反映的是給定條件以后不確定性減少的程度,特征取值越多就意味着確定性更高,也就是條件熵越小,信息增益越大。
從樣本類型的角度,ID3只能處理離散型變量,而C4.5和CART都可以處理連續型變量。從應用的角度,ID3和C4.5只能用於分類任務,而CART也可以用於回歸任務(使用最小平方誤差准則)。
剪枝方法
- 預剪枝:通過提前停止構建而對樹“剪枝”,一旦停止,節點就成為樹葉。(停止生長的方法:定義高度、達到某個節點實例具有相同的特征向量、定義閾值)。
預剪枝方法相對簡單,效率高,而且不需要生成整個決策樹,適合解決大規模問題。但是何時停止不好確定,閾值不好確定,高閾值可能導致過分簡化的樹,而低閾值可能使得樹的簡化太少。 - 后剪枝:它首先構造完整的決策樹,允許過樹過度擬合訓練數據,然后對那些置信度不夠的節點子樹用葉子節點來代替。
相比於預剪枝,后剪枝方法通常可以得到泛化能力更強的決策樹,但時間開銷會更大。
分類樹與回歸樹
- 分類樹
以C4.5分類樹為例,C4.5分類樹在每次分枝時,是窮舉每一個feature的每一個閾值,找到使得按照feature<=閾值,和feature>閾值分成的兩個分枝的熵最大的閾值(熵最大的概念可理解成盡可能每個分枝的男女比例都遠離1:1),按照該標准分枝得到兩個新節點,用同樣方法繼續分枝直到所有人都被分入性別唯一的葉子節點,或達到預設的終止條件,若最終葉子節點中的性別不唯一,則以多數人的性別作為該葉子節點的性別。
總結:分類樹使用信息增益或增益比率來划分節點;每個節點樣本的類別情況投票決定測試樣本的類別。 - 回歸樹
回歸樹總體流程也是類似,區別在於,回歸樹的每個節點(不一定是葉子節點)都會得一個預測值,以年齡為例,該預測值等於屬於這個節點的所有人年齡的平均值。分枝時窮舉每一個feature的每個閾值找最好的分割點,但衡量最好的標准不再是最大熵,而是最小化均方差即(每個人的年齡-預測年齡)^2 的總和 / N。也就是被預測出錯的人數越多,錯的越離譜,均方差就越大,通過最小化均方差能夠找到最可靠的分枝依據。分枝直到每個葉子節點上人的年齡都唯一或者達到預設的終止條件(如葉子個數上限),若最終葉子節點上人的年齡不唯一,則以該節點上所有人的平均年齡做為該葉子節點的預測年齡。
總結:回歸樹使用最大均方差划分節點;每個節點樣本的均值作為測試樣本的回歸預測值。
決策樹損失函數
決策樹的損失函數通常是正則化的極大似然函數。
為了避免出現過擬合的現象,我們要對決策樹進行剪枝。
決策樹損失函數為:
右邊第一項表示誤差大小,第二項表示模型的復雜度,也就是用葉節點表示,防止過擬化。其中\(|T|\)代表葉節點個數,\(N_t\)表示具體某個葉節點的樣例數,\(H_t (T)\)表示葉節點經驗熵。
其中,葉節點經驗熵為
其中,\(N_t\)表示該葉節點有\(N_t\)個樣本,其中\(k\)類的樣本有\(N_{tk}\)個。
正則化的損失函數中前一項代表經驗誤差,而在概率模型中(決策樹模型是一種概率模型),經驗誤差函數的獲得往往通過將極大似然函數取反,即將求極大化為求極小而獲得。因此,在概率模型中,極大似然函數與經驗誤差函數可以認為是相同的概念,那么必然就可以通過經驗誤差函數來推導出極大似然函數,以此來加深對決策樹損失函數的理解。
至此,損失函數被化簡如上,可以看到它與我們所要求的極大似然函數僅一步之遙:將求極小轉為求極大,即去掉上式的負號,我們得到對數極大似然函數:
其對應的極大似然函數是
至此,決策樹模型的極大似然函數推導完畢。
其意義個人理解為:先對各葉節點之間進行極大似然估計,再對各葉節點內部進行極大似然估計,由此得到決策樹模型中的極大似然函數。
相關問題
決策樹處理連續值的方法
因為連續屬性的可取值數目不再有限,因此不能像前面處理離散屬性枚舉離散屬性取值來對結點進行划分。因此需要連續屬性離散化,常用的離散化策略是二分法,這個技術也是C4.5中采用的策略。
對連續屬性的處理如下
1、對特征的取值進行升序排序
2、兩個特征取值之間的中點作為可能的分裂點,將數據集分成兩部分,計算每個可能的分裂點的信息增益(InforGain)。優化算法就是只計算分類屬性發生改變的那些特征取值。
3、選擇修正后信息增益(InforGain)最大的分裂點作為該特征的最佳分裂點
4、計算最佳分裂點的信息增益率(Gain Ratio)作為特征的Gain Ratio。注意,此處需對最佳分裂點的信息增益進行修正:減去log2(N-1)/|D|(N是連續特征的取值個數,D是訓練數據數目,此修正的原因在於:當離散屬性和連續屬性並存時,C4.5算法傾向於選擇連續特征做最佳樹分裂點)
決策樹處理缺失值的方法
1、采用拋棄缺失值
拋棄極少量的缺失值的樣本對決策樹的創建影響不是太大。但是如果屬性缺失值較多或是關鍵屬性值缺失,創建的決策樹將是不完全的,同時可能給用戶造成知識上的大量錯誤信息,所以拋棄缺失值一般不采用。只有在數據庫具有極少量的缺失值同時缺失值不是關鍵的屬性值時,且為了加快創建決策樹的速度,才采用拋棄屬性缺失值的方式創建決策樹。
2、補充缺失值
缺失值較少時按照我們上面的補充規則是可行的。但如果數據庫的數據較大,缺失值較多(當然,這樣獲取的數據庫在現實中使用的意義已不大,同時在信息獲取方面基本不會出現這樣的數據庫),這樣根據填充后的數據庫創建的決策樹可能和根據正確值創建的決策樹有很大變化。
3、概率化缺失值
對缺失值的樣本賦予該屬性所有屬性值的概率分布,即將缺失值按照其所在屬性已知值的相對概率分布來創建決策樹。用系數F進行合理的修正計算的信息量,F=數據庫中缺失值所在的屬性值樣本數量去掉缺失值樣本數量/數據庫中樣本數量的總和,即F表示所給屬性具有已知值樣本的概率。
4、缺失值單獨分支
為什么C4.5要用信息增益率代替信息增益?為什么信息增益會偏向多取值特征?
信息增益在面對類別較少的離散數據時效果較好,但是面對取值較多的特征時效果會很不如人意。關於信息增益對取值較多特征的偏向性,我認為原因是:當特征的取值較多時,根據此特征划分得到的子集純度有更大的可能性會更高(對比與取值較少的特征),因此划分之后的熵更低,由於划分前的熵是一定的,因此信息增益更大,因此信息增益比較偏向取值較多的特征。舉個較為極端的例子可能更好理解:如果特征A的取值能將每一個樣本都分到一個節點當中去的時候(如編號等特征),條件熵部分會為0,這意味着該情況下的信息增益達到了最大值,故ID3算法一定會選擇特征A。但是,顯然的,我們知道這個特征A顯然不是最佳選擇。