決策樹:構建流程
準備工作:明確自變量和因變量,確定信息度量的方式,確定終止條件
選擇特徵:得到當前待處理子集,計算所有特徵信息度量,得到當前最佳分類特徵
創建分支:根據選中特徵將當前記錄分成不同分支,分支個數取決於算法
是否終止:判斷是否滿足終止條件,滿足退出循環,否則繼續遞歸調用
生成結果:判斷是否需要剪枝,需要則適當修剪,否則爲最終結果
說明性的栗子:
決策樹
決策樹(decision tree)是一種基本的分類與迴歸方法。
可以這樣理解,分類決策樹模型是一種描述對實例進行分類的樹形結構。決策樹由結點(node)和有向邊(directed edge)組成。
結點有兩種類型:內部結點(internal node)和葉結點(leaf node)。內部結點表示一個特徵或屬性,葉結點表示一個類。如下圖所示的決策樹,理解就好。
可以把決策樹看成一個if-then規則的集合,將決策樹轉換成if-then規則的過程是這樣的:由決策樹的根結點(root node)到葉結點(leaf node)的每一條路徑構建一條規則;路徑上內部結點的特徵對應着規則的條件,而葉結點的類對應着規則的結論。決策樹的路徑或其對應的if-then規則集合具有一個重要的性質:互斥並且完備。這就是說,每一個實例都被一條路徑或一條規則所覆蓋,而且只被一條路徑或一條規則所覆蓋。這裏所覆蓋是指實例的特徵與路徑上的特徵一致或實例滿足規則的條件。
接下來我們就通過一個栗子來詳細說明決策樹的構建流程。已知電腦購買記錄,對購買者進行建模,預測新用戶是否購買電腦。
準備工作
電腦購買記錄數據如下:
觀察數據,明確自變量(年齡,收入層次,是否單身,信用等級)和因變量(是否購買電腦)
- 自變量
- 因變量
明確信息度量方式:熵 — 信息增益(ID3)
- 熵
- 基尼係數
明確分支終止條件:純度
- 純度
- 記錄條數:當前待處理的記錄條數是否小於一個閾值
- 循環次數
信息熵:是信息論裏面的概念,由香農提出,是用來描述混亂程度的度量,它的取值範圍0~1,值越大,說明越混亂。熵定義爲信息的期望值:公式如下:
那麼假如樣本數據表中的數據爲訓練數據集D,則訓練數據集D的經驗熵爲H(D),|D|表示其樣本容量,及樣本個數。設有K個類Ck, = 1,2,3,...,K,|Ck|爲屬於類Ck的樣本個數,因此信息熵公式就可以寫爲 :
舉個栗子:有一堆蘋果和梨共 100 個,隨機拿出一個,拿出的是哪一種水果?
- 50個蘋果 + 50個梨子
- 0個蘋果+100個梨子
- 80個蘋果+20 個梨子
第一種情況的信息熵爲1,說明混亂程度最大,也就是想要提前預測拿出的水果是啥的難度最大,第二中全是梨,說明混亂程度最小,拿出一個水果則一定是梨子,而第三種情況的信息熵爲0.722,混亂程度不算最大,但是想要預測是蘋果還是梨子還是有一定的難度。熵,就是描述當時現象,事物的混亂程度
信息增益和特徵選擇
信息增益就是指從一個狀態到另一個狀態後,信息的確定性的增加,信息增益越大,那麼對信息確定性的貢獻也就越大。比如我們收集到了幾種植物果實的顏色和氣味,根據這兩個信息確定是否無水果?
不考慮任何特徵,直接去估計結果:
也就是說直接來猜測的話,出錯的概率是最大的。然後考慮以顏色爲參考信息,判斷是否爲水果:
說明以顏色作爲參考信息,混亂程度下降了,確定性增加了。
那我們考慮以味道爲參考信息,判斷是否爲水果:
那麼只根據味道來判斷,甜就是水果,不甜就不是水果,可以說完全確定,不存在混亂了。
所以,信息增益:
- 顏色:1- 0.689 = 0.311
- 味道:1-0 = 1
味道的信息增益更大,所以基於這個數據集,就會優先考慮味道這個特徵所謂劃分依據。
構建決策樹
回到之前的電腦購買記錄數據集:
編寫產生數據矩陣的函數 createDataSet:
第一級特徵選擇
編寫計算整體熵的函數calcAllInfoEnt:
計算整體的熵:購買9例,未購買:5例
編寫計算條件特徵熵和信息增益的函數chooseBestFeatureToSplit和劃分數據集的函數
計算年齡的熵:
計算收入的熵:
計算單身的熵:
計算信用的熵:
計算各個特徵的信息增益:
所以,選擇年齡作爲當前最佳特徵(索引0)。
按照取值產生分支
年齡作爲分支條件,所以在子路徑中就沒有年齡這個特徵了:
首先來看青少年這個分支,該分支是否滿足終止條件(小於最小記錄數,或者純度爲1,或者循環次數)
計算當前分支信息增益後,選擇是否單身作爲當前最佳特徵:
因此,下一級以是否單身作爲分支條件,子已經滿足終止條件:
其他分支的二級特徵選擇方法相同。不再贅述。
生成構建的決策樹
編寫生成決策樹的函數:
輸出模型如下(字典表示 ):
這個就是我們構建的決策樹模型:
- if 青少年 && 單身 then 買;
- if 青少年 && 不單身 then 不買;
- if 中年 then 買;
- if 老年&& 信用一般 then 買;
- if 老年&& 信用良好 then 不買;
總結
以上介紹的算法是ID3 (Iterative Dichotomiser 3 ,迭代樹三代),是由Ross Quinlan提出的:
核心是信息熵,根據信息增益來決定輸的節點。
存在以下問題:
- 信息度量不合理:傾向於選擇取值多的字段
- 輸入類型單一:離散型
- 不作剪枝:容易發生過擬合
C4.5(J.Ross Quinlan在ID3的基礎上提出的):和 ID 3相比的改進:
- 用 信息增益率代替信息增益
- 能對連續屬性進行離散化,對不完整數據進行處理
- 進行剪枝
C50:相比C4.5的改進:
- 使用了boosting
- 前修剪、後修剪
CART(Classification and Regression Tree),是由下面三個大牛一起提出的
- 核心是基尼係數(Gini)
- 分類是二叉樹
- 支持連續值
- 後剪枝進行修剪
- 支持迴歸,可以預測連續值
ID3,C4.5,CART三種決策樹算法的對比: