畢設準備——算法總結


決策樹(Decision Tree)是一種簡單但是廣泛使用的分類器。通過訓練數據構建決策樹,可以高效的對未知的數據進行分類。決策數有兩大優點:1)決策樹模型可以讀性好,具有描述性,有助於人工分析;2)效率高,決策樹只需要一次構建,反覆使用,每一次預測的最大計算次數不超過決策樹的深度。

 

如何預測

先看看下面的數據表格:

ID

擁有房產(是/否)

婚姻情況(單身,已婚,離婚)

年收入(單位:千元)

無法償還債務(是/否)

1

單身

125

2

已婚

100

3

單身

70

4

已婚

120

5

離婚

95

6

已婚

60

7

離婚

220

8

單身

85

9

已婚

75

10

單身

90

上表根據歷史數據,記錄已有的用戶是否可以償還債務,以及相關的信息。通過該數據,構建的決策樹如下:

image

比如新來一個用戶:無房產,單身,年收入55K,那麼根據上面的決策樹,可以預測他無法償還債務(藍色虛線路徑)。從上面的決策樹,還可以知道是否擁有房產可以很大的決定用戶是否可以償還債務,對借貸業務具有指導意義。

 

基本步驟

決策樹構建的基本步驟如下:

1. 開始,所有記錄看作一個節點

2. 遍歷每個變量的每一種分割方式,找到最好的分割點

3. 分割成兩個節點N1和N2

4. 對N1和N2分別繼續執行2-3步,直到每個節點足夠“純”爲止

如何評估分割點的好壞?

如果一個分割點可以將當前的所有節點分爲兩類,使得每一類都很“純”,也就是同一類的記錄較多,那麼就是一個好分割點。比如上面的例子,“擁有房產”,可以將記錄分成了兩類,“是”的節點全部都可以償還債務,非常“純”;“否”的節點,可以償還貸款和無法償還貸款的人都有,不是很“純”,但是兩個節點加起來的純度之和與原始節點的純度之差最大,所以按照這種方法分割。構建決策樹採用貪心算法,只考慮當前純度差最大的情況作爲分割點。

有了上面直觀的認識,我們可以正式定義決策樹了:

      決策樹(decision tree)是一個樹結構(可以是二叉樹或非二叉樹)。其每個非葉節點表示一個特徵屬性上的測試,每個分支代表這個特徵屬性在某個值域上的輸出,而每個葉節點存放一個類別。使用決策樹進行決策的過程就是從根節點開始,測試待分類項中相應的特徵屬性,並按照其值選擇輸出分支,直到到達葉子節點,將葉子節點存放的類別作爲決策結果。

決策樹的構造

      它使用屬性選擇度量來選擇將元組最好地劃分成不同的類的屬性。所謂決策樹的構造就是進行屬性選擇度量確定各個特徵屬性之間的拓撲結構。

      構造決策樹的關鍵步驟是分裂屬性。所謂分裂屬性就是在某個節點處按照某一特徵屬性的不同劃分構造不同的分支,其目標是讓各個分裂子集儘可能地“純”。儘可能“純”就是儘量讓一個分裂子集中待分類項屬於同一類別。儘可能“純”就是儘量讓一個分裂子集中待分類項屬於同一類別。屬性分爲三種不同的情況:

      1、屬性是離散值且不要求生成二叉決策樹。此時用屬性的每一個劃分作爲一個分支。

      2、屬性是離散值且要求生成二叉決策樹。此時使用屬性劃分的一個子集進行測試,按照“屬於此子集”和“不屬於此子集”分成兩個分支。

      3、屬性是連續值。此時確定一個值作爲分裂點split_point,按照>split_point和<=split_point生成兩個分支。

      構造決策樹的關鍵性內容是進行屬性選擇度量,屬性選擇度量是一種選擇分裂準則,是將給定的類標記的訓練集合的數據劃分D“最好”地分成個體類的啓發式方法,它決定了拓撲結構及分裂點split_point的選擇。

      屬性選擇度量算法有很多,一般使用自頂向下遞歸分治法,並採用不回溯的貪心策略。這裏介紹ID3C4.5兩種常用算法。

ID3算法

      從信息論知識中我們知道,期望信息越小,信息增益越大,從而純度越高。所以ID3算法的核心思想就是以信息增益度量屬性選擇,選擇分裂後信息增益最大的屬性進行分裂。下面先定義幾個要用到的概念。

      設D爲用類別對訓練元組進行的劃分,則D的(entropy)表示爲:

      

      其中pi表示第i個類別在整個訓練元組中出現的概率,可以用屬於此類別元素的數量除以訓練元組元素總數量作爲估計。熵的實際意義表示是D中元組的類標號所需要的平均信息量。熵代表事務的不確定性,越大,代表越不確定。

      現在我們假設將訓練元組D按屬性A進行劃分,則A對D劃分的期望信息爲:

      

      即爲條件H(D|A),

而信息增益即爲兩者的差值:

      

      ID3算法就是在每次需要分裂時,計算每個屬性的增益率,然後選擇增益率最大的屬性進行分裂。下面我們繼續用SNS社區中不真實賬號檢測的例子說明如何使用ID3算法構造決策樹。爲了簡單起見,我們假設訓練集合包含10個元素:

      其中s、m和l分別表示小、中和大。

      設L、F、H和R表示日誌密度、好友密度、是否使用真實頭像和賬號是否真實,下面計算各屬性的信息增益。

      (不真實的有三個  真實的有7個)

      

      

      因此日誌密度的信息增益是0.276。

      用同樣方法得到H和F的信息增益分別爲0.033和0.553。

      因爲F具有最大的信息增益,所以第一次分裂選擇F爲分裂屬性,分裂後的結果如下圖表示:

      在上圖的基礎上,再遞歸使用這個方法計算子節點的分裂屬性,最終就可以得到整個決策樹。

      上面爲了簡便,將特徵屬性離散化了,其實日誌密度和好友密度都是連續的屬性。對於特徵屬性爲連續值,可以如此使用ID3算法:

      先將D中元素按照特徵屬性排序,則每兩個相鄰元素的中間點可以看做潛在分裂點,從第一個潛在分裂點開始,分裂D並計算兩個集合的期望信息,具有最小期望信息的點稱爲這個屬性的最佳分裂點,其信息期望作爲此屬性的信息期望。

3.3.2、C4.5算法

      ID3算法存在一個問題,就是偏向於多值屬性,例如,如果存在唯一標識屬性ID,則ID3會選擇它作爲分裂屬性,這樣雖然使得劃分充分純淨,但這種劃分對分類幾乎毫無用處。ID3的後繼算法C4.5使用增益率(gain ratio)的信息增益擴充,試圖克服這個偏倚。

      C4.5算法首先定義了“分裂信息”,其定義可以表示成:

      

      其中各符號意義與ID3算法相同,然後,增益率被定義爲:

      

      C4.5選擇具有最大增益率的屬性作爲分裂屬性,其具體應用與ID3類似,不再贅述。

3.4、關於決策樹的幾點補充說明

3.4.1、如果屬性用完了怎麼辦

      在決策樹構造過程中可能會出現這種情況:所有屬性都作爲分裂屬性用光了,但有的子集還不是純淨集,即集合內的元素不屬於同一類別。在這種情況下,由於沒有更多信息可以使用了,一般對這些子集進行“多數表決”,即使用此子集中出現次數最多的類別作爲此節點類別,然後將此節點作爲葉子節點。

3.4.2、關於剪枝

      在實際構造決策樹時,通常要進行剪枝,這時爲了處理由於數據中的噪聲和離羣點導致的過分擬合問題。剪枝有兩種:

      先剪枝——在構造過程中,當某個節點滿足剪枝條件,則直接停止此分支的構造。

      後剪枝——先構造完成完整的決策樹,再通過某些條件遍歷樹進行剪枝。

      關於剪枝的具體算法這裏不再詳述,有興趣的可以參考相關文獻

 

停止條件

決策樹的構建過程是一個遞歸的過程,所以需要確定停止條件,否則過程將不會結束。一種最直觀的方式是當每個子節點只有一種類型的記錄時停止,但是這樣往往會使得樹的節點過多,導致過擬合問題(Overfitting)。另一種可行的方法是當前節點中的記錄數低於一個最小的閥值,那麼就停止分割,將max(P(i))對應的分類作爲當前葉節點的分類。

 

過渡擬合

採用上面算法生成的決策樹在事件中往往會導致過濾擬合。也就是該決策樹對訓練數據可以得到很低的錯誤率,但是運用到測試數據上卻得到非常高的錯誤率。過渡擬合的原因有以下幾點:

  • 噪音數據:訓練數據中存在噪音數據,決策樹的某些節點有噪音數據作爲分割標準,導致決策樹無法代表真實數據。
  • 缺少代表性數據:訓練數據沒有包含所有具有代表性的數據,導致某一類數據無法很好的匹配,這一點可以通過觀察混淆矩陣(Confusion Matrix)分析得出。
  • 多重比較(Mulitple Comparition):舉個列子,股票分析師預測股票漲或跌。假設分析師都是靠隨機猜測,也就是他們正確的概率是0.5。每一個人預測10次,那麼預測正確的次數在8次或8次以上的概率爲 image,只有5%左右,比較低。但是如果50個分析師,每個人預測10次,選擇至少一個人得到8次或以上的人作爲代表,那麼概率爲 image,概率十分大,隨着分析師人數的增加,概率無限接近1。但是,選出來的分析師其實是打醬油的,他對未來的預測不能做任何保證。上面這個例子就是多重比較。這一情況和決策樹選取分割點類似,需要在每個變量的每一個值中選取一個作爲分割的代表,所以選出一個噪音分割標準的概率是很大的。

 

優化方案1:修剪枝葉

決策樹過渡擬合往往是因爲太過“茂盛”,也就是節點過多,所以需要裁剪(Prune Tree)枝葉。裁剪枝葉的策略對決策樹正確率的影響很大。主要有兩種裁剪策略。

前置裁剪 在構建決策樹的過程時,提前停止。那麼,會將切分節點的條件設置的很苛刻,導致決策樹很短小。結果就是決策樹無法達到最優。實踐證明這中策略無法得到較好的結果。

後置裁剪 決策樹構建好後,然後纔開始裁剪。採用兩種方法:1)用單一葉節點代替整個子樹,葉節點的分類採用子樹中最主要的分類;2)將一個字數完全替代另外一顆子樹。後置裁剪有個問題就是計算效率,有些節點計算後就被裁剪了,導致有點浪費。

 

 

優化方案2:K-Fold Cross Validation

首先計算出整體的決策樹T,葉節點個數記作N,設i屬於[1,N]。對每個i,使用K-Fold Validataion方法計算決策樹,並裁剪到i個節點,計算錯誤率,最後求出平均錯誤率。這樣可以用具有最小錯誤率對應的i作爲最終決策樹的大小,對原始決策樹進行裁剪,得到最優決策樹。

 

優化方案3:Random Forest

Random Forest是用訓練數據隨機的計算出許多決策樹,形成了一個森林。然後用這個森林對未知數據進行預測,選取投票最多的分類。實踐證明,此算法的錯誤率得到了經一步的降低。這種方法背後的原理可以用“三個臭皮匠定一個諸葛亮”這句諺語來概括。一顆樹預測正確的概率可能不高,但是集體預測正確的概率卻很高。


轉載自:http://blog.csdn.net/helh522/article/details/44653761

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章