1. 程式人生 > >決策數演算法進階:屬性測試條件、最佳劃分度量、過擬合現象的處理

決策數演算法進階:屬性測試條件、最佳劃分度量、過擬合現象的處理

我們在先前博文中已經簡要介紹了決策樹的思想和幾個經典演算法來構造決策樹:《決策樹演算法簡介及其MATLAB實現程式碼》。今天我們要針對決策樹繼續深入探討一些的問題,目錄如下:

目錄

一、表示屬性測試條件的方法

二、選擇最佳劃分的度量

三、處理決策樹歸納中的過分擬合現象


一、表示屬性測試條件的方法

決策樹在增長過程中的每個遞迴步都要選擇一個屬性測試條件,將資料劃分成更小的子集。為了實現這個步驟,演算法必須為不同型別的屬性指定測試條件的方法及其相應的輸出方法。

二元屬性

二元屬性的測試條件產生兩個可能的輸出,如下圖所示。

標稱屬性

有多個屬性值,測試條件可以用兩種方法表示:多路劃分和二元劃分

。在某些決策樹演算法如CART中,只產生二元劃分,所以我們需要在有多個屬性值的情況下也支援或者說提供二元劃分的方法。

序數屬性

也可以產生二元或者多路劃分,只要不違背資料屬性值的有序性。如下圖所示是序數屬性的不同的分組方式。

連續屬性

對於連續屬性來說,測試條件可以是具有二元輸出的比較測試結果(即構造大於、小於表示式的結果,真或假),也可以是一個基於範圍的輸出。

對於多路劃分,演算法必須考慮所有可能的連續值區間。可以使用之前介紹的離散化策略(《資料預處理工作中的幾個關鍵主題探討:聚集、抽樣、降維、離散化、變數變換等》),離散化之後每隔離散化區間賦予一個新的序數值,只要保持有序性,相鄰的值還可以聚整合更寬的區間。

二、選擇最佳劃分的度量

有很多度量可以用來確定劃分資料的最佳方法。

選擇最佳劃分的度量通常是根據劃分後子女結點不純性的程度。不純的程度越低,類分佈就越傾斜。

不純性度量包括:

當選擇熵(entropy)作為不純性度量時,熵的差就是所謂的資訊增益(information gain),這是後話。

c表示類別數。舉個例子,分別對三個結點計算上面式子表示的不純性度量:

可以看出,三種方法都是在類分佈均衡時(概率分佈為0.5和0.5)達到最大,而當所有資料都屬於同一個類時(即概率分佈為0和1),達到最小值。他們的度量結果是一致的。其曲線我們畫出來就是:

我們比較父結點和子結點的不純成都,差越大,測試條件的效果就越好。增益delta△是一種可以用來確定劃分效果的標準

I是不純性度量,N是父結點上資料總數,k是屬性值的個數,N(vj)是與子結點vj相關聯的記錄個數。決策樹演算法通常選擇最大化增益△的方法來確定測試條件,因為對於所有的測試條件來說,I(parent)是一個不變的值,所以最大化增益等價於最小化子女結點不純度的加權平均值

多路劃分的不純性度量往往比二元分化小,因為二元劃分實際上合併了多路劃分的某些輸出,降低了子集的純度。

以上介紹偏理論,大家可以尋找一些決策樹的例項來輔助理解。

改進評價標準——增益率

不純性度量有利於具有大量不同值的屬性。然而,有些情況下,比如用ID來分類人,那麼純度是很高的,因為ID和人一一對應。但是這樣就會劃分成非常多路,即產生大量輸出的測試條件,因為每個劃分都是唯一的, 相關聯記錄太少,以致於不能依此做出可靠的預測。

解決該問題的策略有兩種:

1、限制測試條件只能是二元劃分,如CART演算法。

2、修改評估劃分的標準,把屬性測試條件產生的輸出數也考慮進去。如C4.5演算法中用“增益率(gain ratio)”來作為評估劃分的標準。

其中,劃分資訊:,k是劃分的總數。如果某個屬性產生了大量的劃分,它的劃分資訊將會很大,從而降低了增益率。

三、處理決策樹歸納中的過分擬合現象

先剪枝(提前終止規則)

在決策樹完全擬合整個訓練資料集之前就停止決策樹的生長。採用更具限制性的結束條件,比如當不純性度量的增益或估計的泛化誤差的改進低於某個確定的閾值時就停止擴充套件葉結點。當然,這種依靠閾值的方法,很難保證結果是最優的。

後剪枝

先放任決策樹按最大允許的規模生長,然後進行剪枝操作,按照自底向上的方式修剪完全增長的決策樹。

修剪的方法有兩種:1、用新的葉結點替換子數。該葉子結點的類標號由下面子樹記錄中的多數類確定。也就是說不管下面多少分叉,都剪掉,按照少數服從多數原則直接決定該結點的類別。就像葡萄一樣,直接擼走一子串,擼走的部位的性質根據這個子串裡的葡萄性質來定;2、用子樹中最常用的分支代替子樹。

當模型不能再改進時,終止剪枝步驟。

與先剪枝相比,後剪枝技術傾向於產生更好的效果。因為先剪枝是無先驗知識的,而後剪枝是已經大致觀覽了決策樹的全貌再做決定。但是後剪枝計算消耗更大,而且剪掉就浪費了。所以還是要權衡二者的使用。