1. 程式人生 > >演算法-基於ID3和C4.5的決策樹演算法

演算法-基於ID3和C4.5的決策樹演算法

目錄

 

摘要

構建過程

ID3演算法

注意點:

C4.5

參考文獻:


摘要

決策樹演算法是相對比較清晰簡單的有監督分類演算法,所謂有監督就是需要給出標準的已知分類的樣本資料集,根據資料集訓練或者說構建出一個模型,然後根據模型對新的資料進行預測分類決策樹是一種思想不是一種演算法,決策樹最終生成的模型很好理解和想象,可以簡單的理解成if..else即可。可以是二叉樹,可以是不規則的二叉樹或者多叉樹。

根據樣本構建決生成決策樹的過程是重點,如何構建生成決策樹呢?

構建過程

我們假設一個數據集D,如果通過一種方法,讓這些樣本生成一個自頂向下結構的樹,樹的每個非葉子節點對應一個屬性,每個葉子節點對應一個類別,其實也是一個子集。可以想象理解為一個比較純的分類子集。我們可以採用一定的標準和規則分割訓練樣本稱為幾個子集,然後再以相同的規則去分割每個子集,遞迴這個過程,直到每個子集只包含屬於同一類樣本時停止,即到葉子結點了停止。訓練的過程中,每個分割結點需要儲存好分類的屬性。實現這個過程的演算法有很多,參考

常見的決策樹演算法,包括有:CLS、ID3、C4.5、SLIQ、CART。我這裡主要記錄ID3演算法和它的升級演算法C4.5

ID3演算法

所有涉及ID3演算法的博文都會提到一個概念“熵”,那麼到底什麼是熵?這是個啥玩意,我昨天看了一片阮大神寫的一篇《熵:宇宙的中級規則》,瞬間就理解的非常透徹。其實最簡單的可以理解為混亂無序的程度。這也解釋了前面說的葉子結點一般情況下最終是型別純度最高的資料。我們在構建決策樹的時候,首先要找的根節點,可以理解為第一個if的條件,資料集中每一個樣本都有很多屬性,那麼我們選擇哪一個屬性作為第一個根節點呢?這就涉及到熵了,我們分類或者分割的原則肯定,被分到一類的元素相似度肯定是最高,或者說純度最大,也就意味著熵最小。那麼可以簡單的理解為:通過求每一個屬性的條件熵,看那個對應的熵最大,則以這個屬性作為分割點開始。

設D為用類別對訓練元祖進行劃分的,劃分為m個類,則D的熵表示為:

m:資料集D中總共有m類資料集

Pi:這一類資料資料集的概率,這一類資料的個數/總樣本數

infoA(D)表示為某一個屬性的熵 。
v:這個屬性(取值)分支個數。

Dj:這個屬性對應分支上樣本的個數
D:樣本總個數

Info(Dj):這個分支的熵

Gain(A):資訊增益

即:針對一個一個特徵而言,就看一個特徵X,系統有它和沒有它時候的資訊量是多少,兩者的差值就是這個特徵給系統帶來的資訊增益。取資訊增益最大的特徵作為分裂點,後面遞迴這樣操作。

注意點:

(1).若所有特徵屬性已經用於分類後,仍然沒有得到完全純正的分類結果。可以使用多數表決,將葉節點中大部分資料所屬類作為分類結果。

(2).為了防止過擬合,可以設定閾值。比如當某個節點的資料表中多數類的比例超過70%時停止分類。

 

C4.5

ID3資訊增益的計算依賴特徵數目較多的特徵,而屬性值最多的屬性並不一定最優,針對這種情況C4.5作為ID3演算法的改進版,使用資訊增益率來計算查詢分割點。

參考文獻:

https://blog.csdn.net/csdn595075652/article/details/48790903

https://blog.csdn.net/Gamer_gyt/article/details/51242815

https://blog.csdn.net/gao1440156051/article/details/52373647

https://blog.csdn.net/jerry81333/article/details/53125197

https://www.cnblogs.com/leoo2sk/archive/2010/09/19/decision-tree.html