1. 程式人生 > >《機器學習》讀書筆記,第三章決策樹學習

《機器學習》讀書筆記,第三章決策樹學習

決策樹學習是應用最廣泛的歸納推理演算法之一。
它是一種逼近離散值函式的方法,對噪聲資料有很好的健壯性且能夠學習析取表示式
本章描述了一系列決策樹學習演算法,包括如ID3、ASSISTANT和C4.5
這些決策樹學習方法搜尋一個完整表示的假設空間,從而避免了受限假設空間的不足。
決策樹學習的歸納偏置是優先選擇較小的樹


3.1簡介:
決策樹學習是一種逼近離散值函式的方法,在這種方法中學習到的函式被表示為一棵決策樹
學習到的決策樹也能再被表示為多個if-then的規則,以提高可讀性
這種學習演算法是最流行的歸納推理演算法之一,已經被成功地應用到從學習醫療診斷到學習評估貸款申請的信用風險的廣闊領域


3.2決策樹表示法:
決策樹通過把例項從根節點排列(sort)到某個葉子節點來分類例項,葉子節點既為例項所屬的分類
樹上的每一個節點指定了對例項的某個屬性的測試,並且該節點的每一個後繼分支對應於該屬性的一個可能值
分類例項的方法是從這棵樹的根節點開始,測試這個節點指定的屬性,然後按照給定例項的該屬性值對應的樹枝向下移動
然後這個過程在以新節點為根的子樹上重複


通常決策樹代表例項屬性約束合取(conjunction)的析取式(disjunction)
從樹根到樹葉的每一條路徑對應一組屬性測試的合取,樹本身對應這些合取的析取


3.3決策樹學習的適用問題:
儘管已經開發的種種決策樹學習演算法有這樣或那樣不太一致的能力和要求,通常決策樹學習最適合具有以下特徵的問題:
-例項是由"屬性":"值"對錶示的:一系列固定的屬性和值或值域
-目標函式具有離散的輸出值:Bool,或兩個以上輸出值
-可能需要析取的描述:如上面指出,決策樹很自然地代表了析取表示式
-訓練資料可以包含錯誤
-訓練資料可以包含缺少屬性值的例項:決策樹學習甚至可以在有未知屬性值的訓練樣例中使用


已經發現很多實際的問題符合這些特徵,所以決策樹學習已經被應用到很多問題中
例如根據疾病分類患者;根據起因分類裝置故障;根據拖欠支付的可能性分類貸款申請
對於這些問題,核心任務都是要把樣例分類到各可能的離散值對應的類別(catagory)中,因此經常被稱為分類問題


3.4基本的決策樹學習演算法:
大多數已開發的決策樹學習演算法是一種核心演算法的變體
該演算法採用自頂向下的貪婪搜尋遍歷可能的決策樹空間
這種演算法是ID3演算法(Quinlan1986)和後繼的C4.5演算法(Quinlan1993)的基礎
本節給出決策樹學習的基本演算法,大致相當於ID3演算法


基本的ID3演算法通過自頂向下構造決策樹來進行學習。
構造過程是從“哪一個屬性將在樹的根節點被測試?”這個問題開始的
為了回答這個問題,使用統計測試來確定每一個例項屬性單獨分類訓練樣例的能力
分類能力最好的屬性被選作樹的根節點的測試
然後為根節點屬性的每個可能值產生一個分支,並把訓練樣例排列到適當的分支(也就是,樣例的該屬性值對應的分支)之下
然後重複整個過程,用每個分支節點關聯的訓練樣例來選取在該點被測試的最佳屬性
這形成了對合格決策樹的貪婪搜尋(greedy search),也就是演算法從不回溯重新考慮以前的選擇


如下是一個簡化版本————專門用來學習布林值函式:


ID3(Examples, Target_attribute, Attributes)
Examples是訓練樣例集,Target_attribute是這棵樹要預測的目標屬性,Attributes是除目標屬性外供學習到的決策樹測試的屬性列表。返回一顆能正確分類給定Examples的決策樹
-建立樹的Root結點
-如果Examples都為正,那麼返回lable = +的單結點樹Root
-如果Examples都為反,那麼返回lable = -的單節點樹Root
-如果Attributes為空,那麼返回單結點樹Root,label = Examples中最普遍的Target_attribute值
-否則開始
-A <- Attributes中分類Examples能力最好的屬性
-Root的決策屬性 <- A
-對於A的每個可能值vi
-在Root下加一個新的分支對應測試A = vi
-令Examples(vi)為Examples中滿足A屬性值為vi的子集
-如果Examples(vi)為空
-在這個新分支下加一個葉子結點,結點的label=Examples中最普遍的Target_attribute值
-否則在這個新分支下加一個子樹ID3(Examples(vi), Target_attribute, Attributes - |A|)
-結束
-返回Root


3.4.1哪個屬性是最佳的分類屬性
ID3演算法的核心問題是選取在樹的每個節點要測試的屬性
我們希望選擇的是最有助於分類例項的屬性
那麼衡量屬性價值的一個好的定量標準是什麼呢?
這裡將定義一個統計屬性,稱為“資訊增益”,用來衡量給定的屬性分割槽訓練樣例的能力
ID3在增長樹的每一步使用這個資訊增益標準從候選屬性中選擇最佳屬性


1.用熵度量樣例的均一性
為了精確的定義資訊增益,我們先定義資訊理論中廣泛使用的一個度量標準,稱為熵(tropy),它刻畫了任意樣例集的純度(purity)
給定包含關於某個目標概念的正反樣例的樣例集S,那麼S相對這個布林型分類的熵為(見書公式3.1)
Entropy(S) = -p1 * log2(p1) - p2 * log2(p2)
p1為S中正例的比例,p2為S中反例的比例,定義0log2(0)為0
舉例說明,假設S是一個關於布林概念的有14個樣例的集合,它包括9個正例和5個反例([9+,5-])
Entropy(S) = -(9/14) * math.log2(9/14) - (5/14) * math.log2(5/14) = 0.940


注意,如果S的所有成員屬於同一類,那麼S的熵為0(1 * math.log2(1) - (1) * math.log2(1) = 0)
如果集合中正反例的數量不等時,熵介於0和1之間。正反比例各為50%時,熵最大為1。


資訊理論中熵的一種解釋是,熵確定了要編碼集合S中任意成員(即以均勻的概率隨機抽取出的一個成員)的分類所需要的最少二進位制位數
舉例來說,如果p+是1,接收者直到抽出的樣例必為正,所以不必發任何訊息,此時的熵為0
如果p+是0.5,必須用一個二進位制位來說明抽出的樣例是正還是負。
如果p+是0.8,那麼對所需的訊息編碼方法是賦予正例集合較短的編碼,可能性較小的反例集合較長的編碼。,平均每條訊息的編碼少於1個二進位制位


更一般的,如果目標屬性具有c個不同的值(分類,體育,娛樂,財經),那麼S相對於c個狀態(c-wise)的分類的熵定義為
Entropy(S) == sum(i=1->c) -p(i) * log2(p(i))
其中,p(i)是S中屬於類別i的比例
請注意對數的底數仍然是2,原因是熵是以二進位制位的個數來度量編碼長度的。
同時注意,如果目標屬性具有c個可能值,那麼熵最大可能為log2(c)




2.用資訊增益度量期望的熵降低
已經有了熵作為衡量訓練樣例集合純度的標準,現在可以定義屬性分類訓練資料的能力的度量標準
這個標準被稱為“資訊增益information gain”
簡單的說,一個屬性的資訊增益就是由於使用這個屬性分割樣例導致的期望熵降低
更精確地講,一個屬性A相對樣例集合S的資訊增益被定義為:
Gain(S,A) == Entropy(S) - sum(v屬於Values(A))((Sv/S) * Entropy(Sv))


其中,Values(A)是屬性A所有可能值的集合(如:晴天,雨天,陰天),Sv是S中屬性A的值為v的子集
上式中的第一項就是原集合S的熵,第二項是用A分類S後熵的期望值
這個第二項描述的期望熵就是每個子集的熵的加權和,權值為屬於Sv的樣例佔原始樣例S的比例Sv/S
所以Gain(S,A)是由於知道屬性A的值而導致的期望熵減少。
換句話來講,Gain(S,A)是由於給定屬性A的值而得到的關於目標函式值的資訊
當對S的一個任意成員的目標值編碼時,Gain(S,A)的值是在知道屬性A的值後,可以節省的二進位制位數


例如,S是一套有關天氣的訓練樣例,它有一個屬性wind,值為weak和strong
假定S包含14個樣例[9+,5-]
在這14個樣例中,假定正例中的6個和反例中的2個,有wind=weak,其他樣例wind=strong
按照屬性wind分類14個樣例得到的資訊增益可以計算如下:
Values(wind) = weak, strong
S = [9+,5-]
Sweak = [6+, 2-]
Sstrong = [3+,3-]


Gain(S,wind) = Entropy(S) - (Sweak/S)*Entropy(Sweak) - (Sstrong/S)*Entropy(Sstrong)
= Entropy(S) - (8/14)Entropy(Sweak) - (6/14)Entropy(Sstrong) = 0.048


資訊增益正是ID3演算法增長樹每一步中選取最佳屬性的度量標準


3.4.2舉例
見書43頁


3.5決策樹學習中的假設空間搜尋
與其他的歸納學習演算法一樣,ID3演算法可以被描述為從一個假設空間中搜索一個擬合訓練樣例的假設
被ID3演算法搜尋的假設空間就是可能的決策樹的集合
ID3演算法以一種從簡單到複雜的爬山演算法遍歷這個假設空間,從空的樹開始,然後逐步考慮更加複雜的假設,目的是搜尋到一個正確分類訓練資料的決策樹。
引導這種爬山搜尋的評估函式是資訊增益度量


通過觀察ID3演算法的搜尋空間和搜尋策略,我們可以深入認識這個演算法的優勢和不足
-ID3演算法中的假設空間包含所有的決策樹,它是關於現有屬性的有限離散值函式的一個完整空間。因為每個有限離散值函式可被表示為某個決策樹,所以ID3演算法避免了搜尋不完整空間的一個主要風險:假設空間可能不包含目標函式
-當遍歷決策樹空間時,ID3僅維護單一的當前假設。這與第二章討論的變型空間候選消除方法不同,後者維護了與當前的訓練樣例一致的所有假設集合。因為僅考慮單一的假設,ID3演算法失去了表示所有一致假設所帶來的優勢。例如,它不能判斷有多少個其他決策樹也是與現有的訓練資料一致的,或者使用新的例項查詢來最優地區分這些競爭假設
-基本的ID3演算法在搜尋中不進行回溯。每當在樹的某一層次選擇了一個屬性進行測試,它不會再回溯重新考慮這個選擇。所有它易受無回溯的爬山搜尋中常見風險影響:收斂到區域性最優的答案,而不是全域性最優的。對於ID3演算法,一個區域性最優的答案對應著它在一條搜尋路徑上探索時選擇的決策樹。然而,這個區域性最優的答案可能不如沿著另一條分支搜尋到的更令人滿意。後面我們討論一個擴充套件,增加一種形式的回溯(後修剪決策樹)
-ID3演算法在搜尋的每一步都使用當前的所有訓練樣例,以統計為基礎決定怎樣精化當前的假設。這與那些基於單獨的訓練樣例遞增作出決定的方法(例如FIND-S或候選消除法)不同。使用所有樣例的統計屬性(例如,資訊增益)的一個優點是大大降低了對個別訓練樣例錯誤的敏感性。因此,通過修改ID3演算法的終止準則以接受不完全擬合訓練資料的假設,它可以被很容易地擴充套件到處理含噪聲的訓練資料。


3.6決策樹學習的歸納偏置
ID3演算法用什麼策略從觀測到的訓練資料泛化以分類未見例項呢?換句話說,它的歸納偏置是什麼?回憶第二章中,歸納偏置是一系列前提,這些前提與訓練資料一起演繹論證未來例項的分類
如果給定一個訓練樣例的集合,那麼通常有很多決策樹與這些樣例一致。所以要描述ID3演算法的歸納偏置,應該找到它從所有一致的假設中選擇的一個根據。ID3從這些決策樹中選擇哪一個呢?它選擇在使用簡單到複雜的爬山演算法遍歷可能的樹空間時遇到的第一個可接受的樹。概略地講,ID3的搜尋策略為:a)優先選擇較短的樹而不是較長的;b)選擇那些資訊增益高的屬性離根節點較近的樹。在ID3中使用的選擇屬性的啟發式規則和它遇到的特定訓練樣例之間存在著微妙的相互作用,由於這一點,很難準確地劃出ID3的歸納偏置。然而我們可以近似地把它的歸納偏置描述為一種對短的決策樹的偏好。


近似的ID3演算法歸納偏置:較短的樹比較長的樹優先


事實上,我們可以想象一個類似ID3的演算法,它精確地具有這種歸納偏置。考慮一種演算法,它從一個空的樹開始廣度優先搜尋逐漸複雜的樹,先考慮所有深度為1的樹,然後所有深度為2的,一旦它找到了一個與訓練資料一致的決策樹,它返回搜尋深度的最小的一致樹(例如,具有最少結點的樹)。讓我們稱這種廣度優先(breadth-first search)演算法為BFS-ID3。BFS-ID3尋找最短的樹,因此精確地具有“較短的樹比較長的樹優先”的偏置。ID3可被看作BFS-ID3的一個有效近似,它使用一種貪婪的啟發式搜尋企圖發現最短的樹,而不用進行完整的廣度優先搜尋來遍歷假設空間。


因為ID3使用資訊增益啟發式規則和“爬山”策略,它包含比BFS-ID3更復雜的偏置。尤其是,它並非總是找最短的一致樹,而是傾向於那些資訊增益高的屬性更靠近根節點的樹。


ID3歸納偏置的更貼切近似:較短的樹比較長的樹優先。那些資訊增益高的屬性更靠近根節點的樹優先。


3.6.1限定偏置和優選偏置
對比ID3和候選消除演算法顯示出的歸納偏置:
-ID3的搜尋範圍是一個完整的假設空間(例如,能表示任何有限的離散值函式的空間)。但它不徹底地搜尋這個空間,從簡單的假設到複雜的假設,直到遇到終止條件。它的歸納偏置完全是搜尋策略排序假設的結果。它的假設空間沒有引入額外的偏置。
-變形空間候選消除演算法的搜尋範圍是不完整的假設空間(個人註解:即一個僅能表示潛在可教授概念子集的空間,比如它只能表示六種特徵的合取,而不能搜尋其中某些析取),但它徹底地搜尋這個空間,查詢所有與訓練資料一致的假設。它的歸納偏置完全是假設表示的表達能力的結果。它的搜尋策略沒有引入額外的偏置。
簡單地講,ID3的歸納偏置來自它的搜尋策略,而候選消除演算法的歸納偏置來自它對搜尋空間的定義。


ID3的歸納偏置是對某種假設(例如,對於較短的假設)勝過其他假設的一種優選(preference),它對最終可列舉的假設沒有硬性限制。這種型別的偏置通常被稱為優選,它對最終可列舉的假設沒有硬性限制。這種偏置通常被稱為:優選偏置(preference bias)或搜尋偏置(search bias)。
相反,候選消除演算法的偏置是對待考慮假設的一種限定(restriction)。這種偏置稱為:限定偏置,或語言偏置(language bias)


如果需要從某種形式的歸納偏置來從訓練資料中泛化,那麼我們該優先考慮哪種形式的歸納偏置:優選偏置還是限定偏置?
通常,優選偏置比限定偏置更符合需要,因為它允許機器工作在完整的假設空間上,這保證了未知的目標函式被包含在內。相反,限定偏置嚴格地限制了假設集合的潛在空間,通常不是我們希望的,因為它同時引入了把未知的目標函式排除在外的可能性。


鑑於ID3與候選消除演算法分別採用純粹的優選偏置,限定偏置,一些學習系統綜合了兩者。
例如,考慮本書第一章中描述的下棋程式的例子,其中學習到的評估函式被表示為一些固定的棋盤特徵的線性組合。學習演算法調整這個線性組合的引數來最好地擬合現有的訓練資料。這裡,使用線性函式來表示評估函式的決定就引入了限定偏置(非線性的評估函式不可能被表示成這種形式)。同時,選擇了有一個特定的引數調整方法(LMS)演算法就引入了一個優選偏置,這一特定引數源自所有可能引數值空間上的順序搜尋。


3.6.2為什麼短的假設優先
ID3演算法中優選短決策樹的歸納偏置,是不是從訓練資料中泛化的一個可靠基礎?由此引出奧坎姆剃刀:優先選擇擬合數據的最簡單的假設。
一種解釋是,短假設的數量少於長假設的數量,所以找到一個短的但同時與訓練資料擬合的假設的可能性較小。相反,常常有很多非常複雜的假設擬合當前的訓練資料,但卻無法正確地泛化到後來的資料。

例如,考慮決策樹假設。500個結點的決策樹比5個結點的決策樹多得多。如果給定一個20個訓練樣例的集合,可以預期能夠找到很多500個結點的決策樹與訓練資料一致,而如果一個5個結點的決策樹可以完美地擬合這些資料則是出乎意料的。所以我們會相信5個結點的樹不太可能是統計巧合,因而優先選擇這個假設。


3.7決策樹學習的常見問題
決策樹的實際問題包括:確定決策樹增長的深度;處理連續值的屬性;選擇一個適當的屬性篩選度量標準;處理屬性值不完整的訓練資料;處理不同代價的屬性;提高計算效率。
針對以上問題,擴充套件基本的ID3演算法,擴充套件後的系統被改名為C4.5


3.7.1避免過度擬合數據
在之前的例子中,演算法增長樹的每一個分支的深度,直到恰好能對訓練樣例完美地分類。然而這個策略並非總行得通。事實上,當資料中有噪聲或訓練樣例的數量太少以至於不能產生目標函式的有代表性的取樣時,這個策略便會遇到困難。在以上任一種情況發生時,這個簡單的演算法產生的樹會過度擬合訓練樣例。
對於一個假設,當存在其他的假設對訓練樣例的擬合比它差,但事實上在實力的整個分佈(也就是包含訓練樣例集合以外的例項)上表現得卻更好時,我們說這個假設過度擬合(overfit)訓練樣例。


定義:給定一個假設空間H,一個假設h,如果存在其他的假設h',使得在訓練樣例上h的錯誤率比h'小,但在整個例項分佈上h'的錯誤率比h小,那麼就說假設h過度擬合訓練資料


舉例(見書49頁),用ID3演算法來學習哪一個病人患有某種糖尿病。可看出,隨著樹的規模的增長(結點數),在訓練樣例上的精度是單調上升的。然而,在測試樣例上測出的精度先上升後下降。當樹超過大約25個結點時,對樹的進一步精化儘管可以提高它在訓練資料上的精度,卻降低了它在測試樣例上的精度。
造成這樣結果的可能原因之一是訓練樣例中含有隨機錯誤或噪聲。訓練樣例中的隨機噪聲會導致系統過度擬合。事實上,當訓練樣例沒有噪聲時,過度擬合也有可能發生,特別是當少量的樣例被關聯到葉子結點時。這種情況下,很可能出現巧合的規律性,使得一些屬性恰巧可以很好地分割樣例,但卻與實際的目標函式並無關係。一旦這樣巧合的規律性存在,就有過度擬合的風險。


有幾種途徑可被用來避免決策樹學習中的過擬合。它們被分為兩類:
-及早停止樹增長,在ID3演算法完美分類訓練資料之前就停止樹增長
-後修剪法(post-prune),即允許樹過度擬合數據,然後對這個樹進行後修剪
儘管第一種方法可能看起來更直接,但是對過度擬合的樹進行後修剪的第二種方法被證明在實踐中更成功。這是因為在第一種方法中精確地估計何時停止樹增長很困難。


這時產生一個新的關鍵問題:使用什麼樣的準則來確定最終正確樹的規模(結點數)。解決這個問題的方法包括:
-使用與訓練樣例截然不同的一套分離的樣例,來評估通過後修剪方法從樹上修剪結點的效用
-使用所有可用資料進行訓練,但進行統計測試來估計擴充套件(或修剪)一個特定的結點是否有可能改善在訓練集合外的例項上的效能。例如Quinlan使用一種卡方測試來估計進一步擴充套件結點是否能改善在整個例項分佈上的效能,還是僅僅改善了當前的訓練資料上的效能。
-使用一個明確的標準來衡量訓練樣例和決策樹的複雜度,當這個編碼的長度最小時停止樹增長。這個方法基於一種啟發式規則,被稱為最小描述長度的準則。後面章節具體講解。


上面的第一種演算法最為普通,它常被稱為訓練和驗證集法。我們討論這種方法的兩個主要變種。
這種方法中,可用的資料被分成兩個樣例集合:一個訓練集合用來形成學習到的假設,一個分離的驗證集合用來評估這個假設在後續資料上的精度,確切地說是用來評估修剪這個假設的影響。
這個方法的動機是:即使學習器可能會被訓練集合中的隨機錯誤和巧合規律性所誤導,但驗證集合不大可能表現出同樣的隨機波動。
所以,驗證集合可以用來對過度擬合訓練集中的虛假特徵提供防護檢驗。當然,很重要的一點是驗證集合應該足夠大,以便它本身可提供具有統計意義的例項樣本。
一種常見的做法是取出可用樣例的三分之一用作驗證集合,用另外三分之二作訓練集合。


1.錯誤率降低修剪
1987年,Quinlan提出了錯誤率降低修剪(reduced error pruning),考慮將樹上的每一個結點作為修剪的候選物件。
修剪一個結點由以下步驟組成:刪除以此結點為根節點的子樹;使它成為葉子結點;把和該結點關聯的訓練樣例的最常見分類賦給它。
僅當修剪後的樹對於驗證集合的效能不比原來的樹差時才刪除該結點。
這樣便使因為訓練集合的巧合規律性而加入的結點很可能被刪除,因為同樣的巧合不太會發生在驗證集合上的精度的結點。
繼續修剪結點,直到進一步的修剪是有害的為止(也就是降低了在驗證集合上的精度)。
當修剪開始時,樹的規模最大,並且它在測試樣例上的精度最小。
隨著修剪的進行,結點數下降,但在測試集合上的精度上升。


如果有大量的資料可供使用,那麼使用分離的資料集合來引導修剪是一個有效的方法。
這個方法的主要缺點是當資料有限時,從中保留一部分用作驗證集合,會進一步減少訓練樣例的規模。


2.規則後修剪
實踐中,一種更好的方法為“規則後修剪”(rule post-pruning),它的一個變體被用在C4.5中。
規則後修剪包括下面步驟:
-從訓練集合推匯出決策樹,增長決策樹直到儘可能好地擬合訓練資料,允許過度擬合發生。
-將決策樹轉化為等價的規則集合,方法是為從根節點到葉子節點的每一條路徑建立一條規則。
-通過刪除任何能導致估計精度提高的條件(preconditions)來修剪每一條規則。
-按照修剪過的規則的估計精度,對它們進行排序,並按這樣的順序應用這些規則來分類後來的例項。


為了演示以上過程,再次考慮前面的決策樹示例。在規則後修剪演算法中,為樹中的每個葉子結點產生一條規則。
從根節點到葉子結點的每一個屬性的測試稱為一個規則的先行詞(即前件),葉子結點的分類稱為規則的結論(即後件)。
例如:IF (outlook=sunny) and (humidity=high), THEN playtennis=no
接下來,通過刪除不會降低估計精度的先行詞來修剪每一個規則。
例如對於上面的規則,規則後修剪演算法會考慮刪除先行詞(outlook=sunny)或(humidity=high)。
它會選擇這些修剪步驟中使估計精度有最大提升的步驟,然後考慮修剪第二個前件作為進一步的修剪步驟。
如果某個修剪步驟降低了估計精度,那麼這個步驟不會被執行。


如何估計規則精度?一種方法是使用與訓練集合和不相交的驗證集合來驗證。
另一種被C4.5使用的方法是基於訓練集合本身評估效能,但使用一種保守估計(pessimitic estimate)來彌補訓練資料有利當前規則的估計偏置。
更準確地講,C4.5通過以下方法計算保守估計,先計算規則在它應用的訓練樣例上的精度,然後假定此估計精度為二項分佈,並計算它的標準差。
對於一個給定的置信區間,採用下界估計作為規則效能的度量。
例如,對於一個95%的置信區間,規則精度被保守估計為:在訓練集合上的觀察精度減去1.96乘以估計的標準差。
這樣做的效果是,對於大的資料集,保守預測非常接近觀察精度(標準差非常小),然而隨著資料集合的減小,它開始離觀察精度越來越遠。
雖然這種啟發式方法不是統計有效的,但是已經發現它在實踐中是有效的。


為什麼修剪之前要把決策樹轉化為規則集呢?好處有三:
-轉化為規則集可以區分決策結點使用的不同上下文。因為貫穿決策結點的每條不同路徑產生一條不同的規則,所以對於不同路徑,關於一個屬性測試的修剪決策可以不同。相反,如果直接修剪樹本身,只有兩個選擇,要麼完全刪除決策結點,要麼保留它的本來狀態。
-轉化了規則集消除了根節點附件的屬性測試和葉節點附件的屬性測試的區別。於是避免了零亂的記錄問題,比如,若是根節點被修剪了但保留它下面的部分子樹時,如何重新組織這棵樹?
-轉化為規則可以提高可讀性,對人來說,規則總是更容易理解。


3.7.2合併連續屬性
最初的ID3定義被限制為取離散值的屬性。首先,決策樹要預測的目標屬性必須是離散的;其次,樹的決策結點的屬性也必須是離散的。
後者限制可以輕鬆去除,以便把連續值的決策屬性加入到決策樹中。
這可以通過動態的定義新的離散值屬性來實現,即先把連續值屬性的值域分割為離散的區間集合。例如,A>c時,Ac為真,否則為假。
唯一問題是如何選取最佳的閾值c。


我們會選擇產生最大資訊增益的閾值c。
首先按照連續屬性A排序樣例,然後確定目標分類不同的相鄰例項,於是可以產生一組候選閾值,它們的值是相應的A值之間的中間值。
可以證明產生最大資訊增益的c值必定位於這樣的邊界中。然後可以通過計算與每個候選閾值關聯的資訊增益評估這些候選值。


例:
temp 40 48 60 72 80 90
play n  n  y  y  y  n
本例中有兩個候選閾值,它們對應於目標屬性play變化時屬性temp的值:(48+60)/2和(80+90)/2。
然後計算每一個候選屬性閾值(c=54? c=85)的資訊增益,並選擇最好的c=54。


該方法可以擴充套件為,把連續屬性分割成多個區間。


3.7.3屬性選擇的其他度量標準
資訊增益度量本身存在一個內在的偏置:它偏袒具有較多值的屬性。
舉一個極端的例子,日期屬性,它有大量的可能值,要是用它來訓練決策樹,它在所有屬性中又最大的資訊增益。
這是因為單獨日期屬性就可以完全預測訓練資料的目標屬性。
於是這個屬性就會被選作樹的根節點的決策屬性,並形成一顆深度為一級但卻非常寬的樹,這棵樹可以理想地分類訓練資料。
當然,這個決策樹對於後來資料的效能會非常差,因為它不具有預測能力。


日期屬性出了什麼問題呢?簡單地講,是因為太多的可能值必然把訓練樣例分割成非常小的空間。因此,相對訓練樣例,它會有非常高的資訊增益,儘管對於未見例項它是一個非常差的目標函式預測器。


避免這個不足的一種方法是用其他度量而不是資訊增益來選擇決策屬性。
一個可以選擇的度量標準是增益比率(gain ratio)(quinlan 1986)。
資訊比率通過加入一個被稱為分裂資訊(split information)的項來懲罰類似日期這樣的屬性,分裂資訊用來衡量屬性分裂資料的廣度和均勻性:
SplitInformation(S,A) == -sum(i=1->c) ( (Si/S)log2(Si/S) )
其中,S1到Sc是c個值的屬性A分割S而形成的c個樣例子集。
注意分裂資訊實際上是S關於屬性A的各值的熵。這與前面對熵的使用不同,前面我們只考慮S關於學習到的樹要預測的目標屬性的熵。


增益比率度量是用前面的資訊增益度量和這裡的分裂資訊度量來共同定義的:
GainRatio(S,A) == Gain(S,A) / SplitInformation(S,A)


請注意,分裂資訊項阻礙選擇值為均勻分佈的屬性。
例如,考慮一個含有n個樣例的集合被屬性A徹底分割,這時分裂資訊的值為log2n。相反,一個布林屬性B分割同樣的n個例項,如果恰好平分兩半,那麼分裂資訊是1。如果屬性A和B產生同樣的資訊增益,那麼根據增益比率度量,顯然B得分更高。


但是,使用增益比率代替增益來選擇屬性,會產生一個新的問題,當某個Si使Si約等於S時,分母可能為0或非常小。如果某個屬性對於S的所有樣例有幾乎同樣的值,這時要麼導致增益比率未定義,要麼是增益比率非常大。為了避免選擇這種屬性,一般採用這樣一些啟發式規則,比如先計算每個屬性的增益,然後僅對那些增益高過平均值的屬性應用增益比率測試。


除此之外,還有其他方法。如Lopez de Mantaras提出的一種基於距離的度量。
它定義了資料劃分間的一種距離尺度,每個屬性的評估根據它產生的劃分與理想劃分間的距離。
然後選擇劃分最接近完美劃分的屬性。


3.7.4處理缺少屬性值的訓練樣例
在某些情況下,可供使用的資料可能缺少某些屬性的值。在這種情況下,經常需要根據此屬性值已知的其他例項來估計這個缺少的屬性值。


考慮以下情況,為了評估屬性A是否是決策結點n的最佳測試屬性,要計算決策樹在該結點的資訊增益Gain(S,A)。假定<x,c(x)>是S中的一個訓練樣例,並且其屬性A的值A(x)未知。


處理缺少屬性值的一種策略是賦給它結點n的訓練樣例中該屬性的最常見值。另一種策略是可以賦給它結點n的被分類為c(x)的訓練樣例中該屬性的最常見值。然後使用這個估計值的訓練樣例就可以被現有的決策樹學習演算法使用了。Mingers(1989)分析了這個策略。


第二種更復雜的策略是為A的每個可能值賦予一個概率,而不是簡單地將最常見的值賦給A(x)。根據結點n的樣例上A的不同值出現頻率,這些概率可以被再次估計。
例如,給定一個布林屬性A,如果結點n包含6個A=1和4個A=0的樣例,那麼A(x)=1的概率為0.6.
於是,例項x的60%被分配到A=1的分支,40%被分配到另一個分支。
這些片斷樣例(fractional examples)的目的是計算資訊增益,另外,如果有第二個缺少值的屬性必須被測試,這些樣例可以在後繼的樹分支中被進一步細分。
上述的樣例的片斷也可以在學習之後使用,用來分類缺少屬性的新例項。這種情況下,新例項的分類就是最可能的分類,計算的方法是通過在樹的葉結點對按不同方式分類的例項片斷的權求和。C4.5使用這種方法處理缺少的屬性值。


3.7.5處理不同代價的屬性
在某些學習任務中,例項的屬性可能與代價相關。例如,在學習分類疾病時,我們可能以這些屬性來描述患者:體溫、活組織切片檢查、脈搏、血液化驗結果等。
這些屬性在代價方面差別非常大,不論是所需的費用還是患者要承受的不適。對於這樣的任務,我們將優先選擇儘可能使用低代價屬性的決策樹,僅當需要產生可靠的分類時才依賴高代價屬性。


通過引入一個代價項到屬性選擇度量中,可以使ID3演算法考慮屬性代價。例如,我們可以用資訊增益除以屬性的代價,以使低代價的屬性會被優先選擇。雖然這種代價敏感度量不保證找到最優的代價敏感決策樹,但它們確實使搜尋偏置到有利於低代價屬性。


Tan & Schlimmer描述了一種這樣的方法,並把它應用到機器人感知任務中。在這個任務中,機器人必須根據這些物體如何能被它的機械手抓住,從而學會分辨不同的物體。
這種情況下,屬性對應於機器身上的移動聲納獲得的不同感測器度數。
屬性的代價通過定位或操作聲納來獲取屬性值所需的秒數來衡量。
他們證明,通過下面的度量代替資訊增益屬性選擇度量,學到了更加有效的識別策略,同時沒有損失分類的精度。
Gain^2(S,A) / Cost(A)


Nunez描述了一種有關的方法,並把它應用到學習醫療診斷規則上。這裡屬性是具有不同代價的不同症狀和化驗測試。
它的系統使用了稍有不同的屬性選擇度量:
(2^Gain(S,A) - 1) / (Cost(A) + 1)^w
其中,w屬於[0,1]是一個常數,決定代價對資訊增益的相對重要性。Nunez針對一系列任務給出了這兩種方法的經驗對比。