機器學習演算法(二) 決策樹

2021-10-21 20:38:28 字數 3132 閱讀 5980

決策樹是一種常見的分類和回歸演算法,分為分類樹和回歸樹。

分類樹的分類思想很自然,就像常人一樣,常人在判斷乙個瓜是不是好瓜時,一般先看色澤(當然也可能是其他屬性),再看根蒂,再聽敲聲…最終我們做出乙個分類:它是好瓜或者壞瓜。分類樹正是對每乙個示例採取這種屬性依次判別的方式來做出最終分類的。在使用分類樹進行分類時,從根結點開始,對例項的某一屬性進行判斷,根據判斷結果,將例項分配到其子結點。這時,每乙個子結點內部都是該屬性取值相同的示例。如此遞迴地對例項進行判斷並分配,直至達到葉子結點。最後將例項分到葉子結點的類中。

根據上面的描述可以寫出決策樹的演算法:

下面很自然地我們要提出2個問題:

1.什麼時候停止分支?

2.哪些屬性先判斷?

第1個問題:正如演算法中第2、6、13步,決策樹在以下3種情況下停止分支,得到葉子節點:

1.當前節點包含的示例屬於同一類別,無需劃分。

2.當前屬性集為空(所有的屬性都判斷完了),或者所有示例的所有屬性取值相同,無法劃分。

3.當前節點沒有示例。

第2個問題:一般而言,隨著劃分過程的不斷進行,我們希望決策樹的子節點中所包含的樣本盡可能屬於同一類別,即子節點的「純度」越來越高,或者說「混亂度」越來越低。那麼最優的分支屬性就是能使分支後混亂度降低幅度最大的屬性。

對於混亂度或者說混亂度降低幅度的度量,不同的決策樹演算法有不同指標,id3決策樹使用的是資訊增益,c4.5決策樹使用的是資訊增益率,cart決策樹使用的是基尼指數,但它們大同小異。

下面以id3決策樹使用的資訊增益為例進行說明,其他決策樹類似。

id3演算法中,混亂度用資訊熵來度量:

混亂度已經度量了,那混亂度降低幅度是啥?

假定離散屬性a有v個可能的取值,若使用a來對樣本集d進行劃分,則會產生v個子節點,每個節點都包含若干個示例,也有自己的資訊熵,考慮到每個子結點中的示例個數不同,再乘上權重dv/d即可,那麼把所有節點的資訊熵的加權求和就是分支後的資訊熵,分支前資訊熵減去分支後資訊熵就是資訊增益。

可以這樣直觀的理解資訊增益:在原狀態時系統獲得了一些資訊量,使得系統的混亂度降低了,那麼獲得的資訊量大小就是資訊增益。

使用資訊增益確定哪些屬性優先判斷時會存在乙個問題:資訊增益偏好那麼屬性取值更多的屬性,因為屬性取值越多資訊熵就越大。資訊增益率避免了這一問題,它使用資訊增益除以屬性自身的資訊熵來得到乙個懲罰後的資訊增益。

cart決策樹使用基尼值來度量混亂度,使用基尼指數來度量分治後的混亂度(注意不是混亂度降低幅度)。顯然,基尼指數越低就代表混亂度降低幅度越大,這個劃分屬性也就越好。

這樣,我們已經能夠依據不同的屬性劃分原則建立不同型別的分類樹。

上面的決策樹演算法得到的是一棵完整的樹,即只要只要是能降低訓練集混亂程度的分支過程就會被執行。然而這種做法只考慮了訓練集,沒有考慮測試集,可能過度學習訓練集,把訓練集自身的特點當作普遍特點,造成過擬合(在測試集上**效果差)。因此我們可以主動去掉一些分支來降低過擬合的風險,稱為剪枝。

剪枝分為「預剪枝」和「後剪枝」。預剪枝在決策樹生成過程中,對每個節點在分支之前進行預先判斷,若這次分支不能帶來模型泛化效能的提公升(即驗證集準確率要大於訓練集準確率),就停止分支。即使後續的分支可能會使泛化效能提公升,也不再考慮。所以預剪枝是一種貪心演算法,只考慮每一步的最優,得到的是區域性最優的結果。

後剪枝先生成一棵完整的樹,再從葉子節點的分支進行判斷,若分支能帶來泛化效能的提公升就保留分支。

對比預剪枝和後剪枝策略,我們可以得出結論:

預剪枝易造成欠擬合,但訓練開銷很小;後剪枝欠擬合風險很小(可能造成過擬合),但訓練開銷很大。

連續屬性

到目前為止我們討論的屬性都是離散屬性,那麼連續屬性應該怎麼辦呢?

c4.5決策樹演算法給出了答案。將連續屬性離散化,最簡單的策略就是二分法。

給定樣本集d和連續屬性a,假定a在d上出現了n個不同的取值,將這些值的大小進行排序,記為。基於劃分點t可將d分為d-和d+。顯然劃分點在區間 [ai,ai+1) 內的取值是沒有區別的,所以劃分點有a-1種取值。劃分之後,連續屬性a事實上就變成了二分類的離散屬性。其資訊增益為:

不斷嘗試劃分點t的取值,使得上式最大即可。

缺失值

現實情況中每個屬性可能都在不同的位置有缺失值,如果都刪除會導致樣本量減少太多,我們當然可以在將資料集輸入演算法之前就預處理好缺失資料,但決策樹演算法是允許輸入資料集有缺失值的。

處理方法很簡單,我就不寫公式了,計算資訊增益時只考慮不缺失的示例,計算結果乘以(1-缺失比例)即可。

使用回歸樹進行**包括2步:

1.使用回歸樹演算法將a1,a2…ap構成的樣本空間劃分為若干個無縫且不重疊的子空間 。

2.對於待**的示例,將其落在對應的子空間ri中,用ri中各示例的標籤值的平均值作為**值。

於是問題的關鍵在於:如何劃分出子空間?

這需要乙個損失函式,我們這裡使用殘差平方和(也就等同於均方誤差):

令rss最小的空間劃分就是最優的劃分,但直接計算這個空間劃分是不可行的。我們仍然需要使用貪心演算法逐個地確定劃分屬性和每個屬性地劃分點:對於屬性aj和其對應的最優劃分點s,將整個屬性空間劃分為 aj>=s 和 aj至此,決策樹的主要內容已經介紹完畢,其它不太重要的內容如多變數決策樹、悲觀錯誤剪枝、代價複雜度剪枝等,大家可以自行了解哈。

文章參考了一些其他作者的內容,在此致謝!

機器學習演算法 決策樹

決策樹類似一中策略或者條件選擇,其中各個節點代表選擇條件,各個葉子結點代表可能達到的結果,決策樹 decision tree 是乙個樹結構 可以是二叉樹或非二叉樹 其每個非葉節點表示乙個特徵屬性上的測試,每個分支代表這個特徵屬性在某個值域上的輸出,而每個葉節點存放乙個類別。使用決策樹進行決策的過程就...

機器學習演算法 決策樹

決策樹的使用主要是用於分類。年齡收入 信用是否學生 是否買電腦年輕高 高是是中年 低中否否 老年中低否 是對於一些適合分類的資料中,考慮各種因素對結果的影響大小進行決策,一般是先選取區分度較高的因素。比如說,年齡大小這個因素在很大程度上影響我們的結果 是否買電腦。那麼,年齡因素將作為第乙個決策因素出...

機器學習演算法 決策樹

1 決策樹直觀理解 假設,已知10人房產 婚姻 年收入以及能否償還債務的樣本,那麼第11個人來,知其房產 婚姻 以及年收入情況,問他是否能償還債務?2 前置知識 理解決策樹,我們必須知道一下概念 資訊熵 描述系統的不確定度,熵越高,代表系統越混亂,包含的資訊量也就越多,其公式 例 計算前10個樣本能...