實習了一段時間,接觸了一些數據挖掘、機器學習的算法,先記錄下來方便以后的復習回顧:
一:決策樹概念
決策樹可以看做一個樹狀預測模型,它是由節點和有向邊組成的層次結構。樹中包含3中節點:根節點、內部節點、葉子節點。決策樹只有一個根節點,是全體訓練數據的集合。樹中每個內部節點都是一個分裂問題:指定了對實例的某個屬性的測試,它將到達該節點的樣本按照某個特定的屬性進行分割,並且該節點的每一個后繼分支對應於該屬性的一個可能值。每個葉子節點是帶有分類標簽的數據集合即為實例所屬的分類。
決策樹算法很多,例如:ID3、C4.5、CART等。這些算法均采用自上而下的貪婪算法,每個內部節點選擇分類效果最好的屬性來分裂節點,可以分成兩個或者更多的子節點,繼續此過程直到這棵決策樹能夠將全部的訓練數據准確的分類,或所有屬性都被用到為止。該算法的簡化版本是在使用了全部樣本的假設來構建決策樹的。具體步驟如下:
(1):假設T為訓練樣本集。
(2):從屬性集合Attributes中選擇一個最能區別T中樣本的屬性。
(3):創建一個樹節點,它的值為所選擇的屬性。創建此節點的子節點,每個子鏈代表所選屬性的一個唯一值(唯一區間),使用子鏈的值進一步將樣本細分為子類。
對於每一個分支繼續重復(2)(3)的過程,直到滿足以下兩個條件之一:
(a):所有屬性已經被這條路徑包括。
(b):與這個節點關聯的所有訓練樣本都具有相同的目標屬性(熵為0)。
下面借用《數據挖掘概念與技術》書中的一個列子來方便理解:
圖1-1
圖1-1是一個典型的決策樹,它表示概念buys_computer,即它目的是預測顧客是否可能購買計算機。內部節點用矩形表示,葉子節點用橢圓表示。
為了對未知的樣本分類,樣本的屬性值在決策樹上測試。我們用一些訓練樣本構造了圖1-1中的決策樹,每個內部節點表示一個屬性上的測試,每個葉子節點代表一個分類(buys_computer = yes, buys_computer = no ).
二:決策樹的適用情況
通常決策樹學習最適合具有以下特征的問題:
(1):實例是由“屬性-值”對表示的。
(2):目標函數具有離散的輸出值。例如上面的yes和no
(3):實例的所有屬性都是離散值。如果是連續值或者離散值種類太多,可以把它分為不同的區間,例如上面的age分為了3個區間而不是每個獨立的值為一個判斷分支。
三:決策屬性的選擇
建樹算法中屬性的選擇非常重要。屬性選擇方法很多種,例如信息增益(information gain)、信息增益比(information gain ratio)、Gini 指標(Gini Index)等方法。
ID3算法依據的是信息增益來選擇屬性,每次計算所有剩余候選屬性的信息增益,然后根據信息增益最大的一個作為此次的分類屬性。信息增益是用熵作為尺度,是衡量屬性對訓練數據分類能力的標准。
假設表3-1為圖1-1中的訓練樣本集:共有14條數據,屬性有:age、income、student、credit_rating,目標屬性是:buys_computer
表3-1
下面根據表3-1和圖1-1的例子來講解某具體屬性的信息增益的計算過程:
對於某個具體的屬性A,它的信息增益計算表達式是:
(1)是對給定樣本分類所需的期望信息,計算過程如下:
設S是s個訓練樣本的集合,S也就是對於表3-1中的數據,s = 14。假定類標號屬性有m個不同值,定義m個不同類Ci(i=1,2,...m).設si是類Ci中的樣本數,對應表3-1和圖1-1實例中m=2,其中 C1 = yes C2 = no s1 = 9 s2 = 5 。
則:
其中pi是任意樣本屬於Ci的概率,pi = si/s .公式中的對數函數以2為底,因為信息用二進位編碼。
在該實例中
(2)是根據A划分子集的熵或期望值,計算過程如下:
設屬性A有v個不同的值{a1,...av},對應實例中的數據,例如屬性age,分為3個不同的值:
a1為 <=30
a2為 30..40
a3為 >40 ;
屬性A把訓練樣本集合S划分為v個子集{S1,...Sv};其中Sj包含訓練樣本集S中在屬性A上有值aj的樣本。Sij是子集Sj中屬於類Ci的樣本數。
其中充當第j個子集的權值,等於子集(即A值為aj)的樣本總數除以S中的樣本總數 即 Sj/S。
對於給定的子集Sj有
其中,Pij=Sij/Sj ,是Sj中的樣本屬於Ci的概率。
該實例中:
因此屬性age的信息增益為:Gain(age)= I(s1,s2) - E(age) = 0.246
類似的我們可以計算出Gain(income)=0.029 Gain(student)=0.151 Gain(credit_rating)=0.048.由於age在屬性中具有最高信息增益,因此它被選作為第一個測試屬性。
圖1-1是最終生成的決策樹。
四:決策樹的剪枝
為了防止決策樹和訓練樣本集的過度擬合,需要對決策樹進行剪枝。剪枝通常有事先剪枝法和事后剪枝法。
事先剪枝法: 是建樹過程中判斷當前節點是否需要繼續划分的剪枝方法。通常是通過重要性檢測判斷是否停止分裂節點。
事后剪枝法: 是讓樹充分生長之后,再判斷是否將某些分支變成節點。常用方法是根據錯誤分裂率(或者決策樹編碼長度)進行決策樹的事后修剪。
參考資料:機器學習 Mitchell T.M
數據挖掘:概念與技術 第三版 Jiawei Han