決策樹-筆記(1)

1 - 背景

決策樹:是基於樹結構的一種機器學習方法。其訓練方法決定了它是一種有監督學習方法,且和KNN同樣是一種非參數化模型。且當類數較多時,該方法具備必定的優點[1]。最流行的決策樹是將空間拆分紅超矩形,超矩形的邊與軸平行。經常使用的算法有:CHAID、 CART、ID三、C4.五、 Quest 和C5.0(後續慢慢更新)。
ps:參數化模型,有着固定數量的參數,一般在預測階段速度很快,而缺點就是對數據分佈有着先驗假設;非參數化模型,其參數會隨着訓練集的增大而增長,因此相對更加靈活,但是對於大數據集來講,其計算效率相對低下。算法

樹結構主要都是由根節點,內部節點,葉節點組成。根節點:做爲樹的入口,也做爲第一個判別特徵點;內部節點:在當獲得其父節點的時候,父節點須要接着劃分,且自身還須要進一步劃分;葉節點,基於父節點劃分基礎上,分到當前結點的樣本無需進一步劃分,且葉節點所表示的標籤爲當前葉節點包含的樣本中標籤最多的那個標籤。
一般會有四種狀況:
1)這是一棵空樹;
2)這是一棵只有根節點的樹;
3)這是一棵只有根節點,葉子節點的樹;
4)這是一棵具備根節點、內部節點、葉子節點的完整樹。
狀況1):此時對應的是訓練數據集爲空,或者未開始訓練;
狀況2):此時訓練集都被歸爲同一個類別,好比訓練集自己就是隻有一種類別的時候;
狀況3):只通過了一次特徵判別就完成樹的訓練,或者在訓練後,通過「後剪枝」操做後獲得的決策樹;
狀況4):通過完整的訓練,且「後剪枝」沒有徹底剪完,成爲狀況3,大部分都是屬於狀況4.機器學習

其學習過程分紅三個部分:判別特徵的選取,樹的生成,減枝。
判別特徵的選取:即決策樹的根節點和內部節點所表示的含義。這裏一般有三種選取方式:ID3的信息增益、C4.5的啓發式增益率、CART的基尼係數。
樹的生成:即決策樹的訓練階段,此時若是引入了「預剪枝」,那麼就是邊訓練邊剪枝;
剪枝:分「預剪枝」和「後剪枝」。"預剪枝"就是在樹訓練階段,在判斷特徵選取的時候,預先計算當該判斷節點生成前與生成後,整棵樹的泛化能力是否有提高,若是有,該判斷節點會生成。若是沒有,當前節點就是葉子節點;「後剪枝」就是在樹訓練完成以後,對整棵樹自底向上的進行剪枝,判別標準也是剪枝先後,整棵樹的泛化能力是否有提高。學習

2 - 判別特徵的選取規則

決策樹發展中三大算法:ID3(1986)、C4.5(1993)、CART(1984)。首先他們在判別特徵的選取規則上就有不一樣,不過也有類似之處。判別特徵的選取,也就是根節點或者當前內部節點的生成,主要就是但願從根節點到當前節點這條路徑選取的樣本可以儘量的類似,如但願可以正確把類別爲1的樣本,且類似的樣本可以分到一塊兒,一般也叫作純度。
爲了使得樹的生長更有意義,每一個分支必須產生比父節點子集更「類均勻」的子集。也就是每一個子節點表示的樣本集合都更好的屬於特定的類,例如,一個四類問題,假設子集\(X_t\)中的向量等機率的在類中分佈。對節點進行劃分,使得屬於類\(w^1\)\(w^2\)的點構成一個子集,而類\(w^3\)\(w^4\)的點構成另外一個子集,那麼新子集與原子集\(X_t\)相比來講更均勻,或者說更"純"。因此目的是定義一種量度標準,用於量化節點的不純度,並將節點分支,從而使得子節點的不純度比父節點的不純度減小。常見的節點不純度就是信息熵。這來源於香農信息論。不難證實,若是全部的機率都相等,那麼信息熵值最大,若是全部類都屬於同一類,那麼信息熵的計算值爲0。因此決策樹的生成,能夠當作是不斷地減小數據集不純度的過程。大數據

2.1 - 信息增益

首先,是引入信息熵的概念,且\(Ent(D)\)的值越小,則其純度越高:
\[Ent(D) = -\sum_{k=1}^{|y|} p_klog_2p_k\tag{2.1}\]
\(|y|\)表示樣本的總類,若是\(|y|=2\)那麼這就是個二分類數據集;\(p_k\)表示第\(k\)類樣本在全部樣本中佔的比例爲。且\(Ent(D)\)表示的就是所要劃分的節點的信息熵,而接下來就是須要肯定以哪一個特徵做爲下一個判別特徵從而劃分該節點。假定當前可選的特徵集合爲\(F\),其第\(i\)個特徵爲\(F_i\)。假定當前考慮的特徵\(F_i\)一共有\(V\)種狀況,那麼若是以當前特徵做爲判別特徵,則會從當前須要劃分的節點上生成\(V\)條鏈接,那麼這\(V\)條鏈接中,第\(v\)個鏈接上的樣本個數,假定爲\(|D^v|\),那麼第\(v\)個鏈接上的權重機率即爲\(\frac{|D^v|}{|D|}\),能夠看出,權重越大,則當前鏈接劃分的樣本就越多。從而,計算出若是使用當前特徵做爲判別特徵,那麼其信息增益爲:
\[Gain(D,F_i) = Ent(D)-\sum_{v=1}^V\frac{|D^v|}{|D|}Ent(D^v) \tag{2.2}\]
一般來講,信息增益越大,意味着使用判別特徵\(F_i\)進行劃分所得到的「純度」越大。因此選擇信息增益最大的。spa

2.1.1 - 離散特徵

這裏拿周老師西瓜書上的例子來講明(離散特徵):
3d


圖2.1 周老師西瓜書上表4.1

1 - 根節點的肯定
以圖2.1舉例。由於是2個類別,即 \(|y|=2\),且該訓練集包含了 17個樣本。其中正例 \(p_1=\frac{8}{17}\),反例 \(p_2=\frac{9}{17}\)。則根節點的信息熵爲:
\[Ent(D) = -\sum_{k=1}^2p_klog_2p_k=-(\frac{8}{17}log_2\frac{8}{17}+\frac{9}{17}log_2\frac{9}{17})=0.998\tag{2.3}\]
且當前判別特徵集合爲{色澤、根蒂、敲聲、紋理、臍部、觸感}。假設先考慮"色澤"這個特徵,它是離散值,只有三個取值:{青綠,烏黑,淺白},即當前 \(V=3\)。且能夠獲得三個數據集的子集:
\(D^1\)(色澤=青綠)={1,4,6,10,13,17},且只有2種樣本類別,則 \(p_1 = \frac{3}{6}\), \(p_2=\frac{3}{6}\)
\(D^2\)(色澤=烏黑)={2,3,7,8,9,15},則 \(p_1=\frac{4}{6}\), \(p_2=\frac{2}{6}\)
\(D^3\)(色澤=淺白)={5,11,12,14,16},則 \(p_1 = \frac{1}{5}\), \(p_2=\frac{4}{5}\)
以"色澤"做爲當前結點(目前是根節點)的判別特徵的話,對應的三個信息熵爲:
\(Ent(D^1) = 1.000\), \(Ent(D^2)=0.918\), \(Ent(D^3)=0.722\)其信息增益爲:
\[Gain(D,色澤)= Ent(D)-\sum_{v=1}^3\frac{|D^v|}{|D|}Ent(D^v)=0.109 \tag{2.4}\]
對應的其餘幾個特徵的信息增益爲:
\(Gain(D,根蒂)=0.143\)\(Gain(D,敲聲)=0.141\)\(Gain(D,紋理)=0.381\)\(Gain(D,臍部)=0.289\)\(Gain(D,觸感)=0.006\)
由於"紋理"的信息增益最大,因此第一個判別特徵選擇爲「紋理」:

圖2.2 第一層(根節點)的劃分結果

ps:由於是離散性質的特徵,因此對於第二層來講,就能夠直接將使用過的特徵剔除當前層的候選判別特徵集合了,由於是基於父節點的先驗機率基礎上作的進一步劃分,即第二層只要基於{色澤、根蒂、敲聲、臍部、觸感}來考慮怎麼劃分,而若是是連續型的特徵,就能夠不作剔除這一步,只是縮小範圍,後面會說到。
2 - 第二層節點的肯定
基於圖2.2基礎,咱們如今須要劃分第二層的清晰節點,該節點上有數據集 \(D^1 = \{1,2,3,4,5,6,8,10,15\}\),由於這是離散特徵,且傳到該節點就是基於特徵(紋理)先驗基礎上的,因此當前的候選特徵集合 \(F=\{色澤、根蒂、敲聲、臍部、觸感\}\)
1)先計算節點的信息熵:$Gain(D^1) =-(\frac{7}{9}log_2\frac{7}{9}+\frac{2}{9}log_2\frac{2}{9})=0.764 $
2) \(Gain(D^1,色澤) = 0.764-(\frac{4}{9}[-(\frac{3}{4}log_2\frac{3}{4}+\frac{1}{4}log_2\frac{1}{4})]+\frac{4}{9}[-(\frac{3}{4}log_2\frac{3}{4}+\frac{1}{4}log_2\frac{1}{4})]+\frac{1}{9}(\frac{1}{1}log_2\frac{1}{1}))=0.043\)
同理:
\(Gain(D^1,根蒂)=0.458\); \(Gain(D^1,敲聲)=0.331\); \(Gain(D^1,臍部)=0.458\); \(Gain(D^1,觸感)=0.458\);
由於有三個相同的最大值,因此任意取一個就行,這裏假設取"根蒂",從而獲得新的三個樣本集:
\(D^1 = \{1,2,3,4,5\}\); \(D^2=\{6,8,15\}\); \(D^3 = \{10\}\)
由於對於此時的 \(D^1\)都屬於同一個類別,因此無需再劃分,而 \(D^3\)也是同理。對於 \(D^2\)由於包含了3個樣本,2個正類,1個負類,且當前沒有引入"預剪枝",因此樹生成階段,就會一直生成到最後。經過迭代,最後生成圖2.3。

圖2.3 西瓜書上圖4.4

2.1.2 - 連續特徵

咱們獲取的「樣本x特徵」矩陣,其值呈現的都是肯定值。所謂離散特徵,就是當前特徵的取值有限,且常常重複出現;而連續值,就是具備多個取值,基本上都看不到重複那種,能夠認爲是連續的。如2.1.1是處理當特徵爲離散時候的狀況,而不少時候,咱們獲得的特徵是連續值。以西瓜書的表4.3做爲例子。
blog


圖2.4 西瓜書表4.3

這裏相對於圖2.1 增長了2個特徵,密度和含糖率,這2個都是連續值。而爲了應對這種狀況時,能夠經過m分法,將其分紅m份,且以相鄰的兩個特徵點的平均值做爲劃分點,從而獲得m個所謂的離散區域,此時 \(m \leq n\),n爲訓練集樣本個數。如候選特徵集合中 \(F_i=\{f_1,f_2,f_3,...,f_n\}\)(這n個特徵值從小到大排序的)。對於劃分點 \(t\)來講,其值爲 \(\frac{1}{2}(f_{t-1}+f_{t+1})\),因此t一共有 \(n-1\)個可能。不過如此區分,帶來的計算量也是巨大的。C4.5中採用的是 \(m =2\)的狀況。從而當前特徵其實能夠劃分紅2個離散區域。且經過以下形式選取最優的那個劃分點:
\[\begin{eqnarray} Gain(D,F_i) &=& max_{t}Gain(D,F_i,t)\\ &=& max_{t}Ent(D)-\sum_{\lambda \in \{-,+\} }\frac{|D^\lambda|}{|D|}Ent(D_t^\lambda) \end{eqnarray} \tag{2.5}\]
如圖2.4中 密度有16個候選劃分點
\(\{0.244, 0.294, 0.351, 0.381, 0.420, 0.459, 0.518, 0.574, 0.600, 0.621, 0.636, 0.648, 0.661, 0.681, 0.708, 0.746\}\)
從而計算得出其最佳劃分點爲0.381,對應的信息增益爲0.262.
\(Gain(D,密度,0.381) = 0.998-(-[\frac{13}{17}(\frac{8}{13}log_2\frac{8}{13}+\frac{5}{13}log_2\frac{5}{13})+\frac{4}{17}(\frac{0}{4}log_2\frac{0}{4}+\frac{4}{4}log_2\frac{4}{4})]) = 0.262\)
同理得,含糖率最佳劃分點0.126,信息增益爲0.349。從而獲得:
\(Gain(D,色澤)=0.109\)\(Gain(D,根蒂)=0.143\)\(Gain(D,敲聲) =0.141\)\(Gain(D,紋理)=0.381\)\(Gain(D,臍部) = 0.289\)\(Gain(D,觸感) = 0.006\)\(Gain(D,密度) = 0.262\)\(Gain(D,含糖率)=0.349\)

ps:假如選取了密度爲當前的判別特徵,則其左邊子樹是密度小於0.381的樣本,右子樹是大於0.381的點。由於該特徵是連續值,故而不會被剔除下一層的判別特徵的候選集合,由於對於小於0.381的樣本集合(即左子樹)來講,其仍是能夠從範圍\([min,0.381)\)接着進一步選取下一層的最佳劃分點,而後將其離散化。排序

2.2 - 信息增益率

由於2.1的信息增益方法對於當該特徵的取值較多時候,會有所誤差,好比一個特徵只有2個取值,一個特徵卻能取3個值,這時候信息增益方法會稍微傾向於選擇能取3個值得特徵做爲判別特徵。爲了解決這種特徵取值個數帶來的問題,C4.5選擇使用信息增益率的方式做爲判別特徵的選取規則。
增益率公式爲:
\[Gain\_ratio(D,F_i) = \frac{Gain(D,F_i)}{IV(F_i)} \tag{2.6}\]
這裏\(IV(F_i)\)就是該特徵的「固有值」,其可取值的數量越多(\(V\)越大),則\(IV(F_i)\)一般越大。其計算公式爲:
\[IV(F_i) = -\sum_{v=1}^V\frac{|D^v|}{|D|}log_2\frac{|D^v|}{|D|} \tag{2.7}\]
如圖2.1所示的數據集:
\[IV(觸感,V=2) =-(\frac{5}{17}log_2\frac{5}{17}+\frac{12}{17}log_2\frac{12}{17}) = 0.874\]
\[IV(色澤,V=3) = 1.580\]
\[IV(編號,V=17) = 4.088\]
能夠發現,計算公式和計算信息增益是同樣的,只是信息增益是基於樣本標籤,而這裏是計算該特徵的幾個不一樣的取值。增益率規則對可取值數目較少有偏好,因此C4.5採用了啓發式增益率,即先從當前候選特徵集合中找到信息增益高於平均水平的特徵,組成新候選特徵集合,而後再計算這個新候選特徵集合中增益率高的那個。至關於設定一個自適應閾值,將大於該閾值的特徵留下,而後取留下特徵中增益率高的特徵。io

2.3 - 基尼係數

在CART算法中,採起的是基尼係數的方式來衡量判別特徵。
數據集D的純度可用基尼值來度量:
\[\begin{eqnarray}Gini(D) &=& \sum_{k=1}^{|y|} \sum_{k^` \neq k}p_kp_{k^`}\\ &=& 1 - \sum_{k=1}^{|y|}p_k^2 \end{eqnarray}\]
直觀來講,\(Gini(D)\)反映了從數據集D中隨機抽取兩個樣本,其類別標記不一致的機率,因此一樣也是,其值越小,數據集D的純度越高。
候選判別特徵\(F_i\)的基尼指數定義爲:
\[Gini\_index(D,F_i) = \sum_{v=1}^V\frac{|D^v|}{|D|}Gini(D^v)\]
因此在候選特徵集合中選擇使得劃分後基尼指數最小的熟悉做爲最優劃分屬性,即\(argmin_{F_i\in F}Gini\_index(D,F_i)\)class

2017/03/17 第一次修改! 參考資料: [1] 模式識別 第4版.(希臘)西奧多裏蒂斯 [2] 周志華,機器學習 [3]

相關文章
相關標籤/搜索