C4 5演算法詳解(至今見過寫的最好的演算法詳解)

2021-06-23 04:22:35 字數 3557 閱讀 8245

c4.5是機器學習演算法中的另乙個分類決策樹演算法,它是基於id3演算法進行改進後的一種重要演算法,相比於id3演算法,改進有如下幾個要點:

首先,說明一下如何計算資訊增益率。

熟悉了id3演算法後,已經知道如何計算資訊增益,計算公式如下所示(來自wikipedia):

或者,用另乙個更加直觀容易理解的公式計算:

然後計算資訊增益,即前者對後者做差,得到屬性集合a一組資訊增益:

這樣,資訊增益就計算出來了。

下面看,計算資訊增益率的公式,如下所示(來自wikipedia):

其中,ig表示資訊增益,按照前面我們描述的過程來計算。而iv是我們現在需要計算的,它是乙個用來考慮**資訊的度量,**資訊用來衡量屬性分 裂資料的廣度和均勻程式,計算公式如下所示(來自wikipedia):

簡化一下,看下面這個公式更加直觀:

其中,v表示屬性集合a中的乙個屬性的全部取值。我們以乙個很典型被引用過多次的訓練資料集d為例,來說明c4.5演算法如何計算資訊增益並選擇決策結點。

上面的訓練集有4個屬性,即屬性集合a=;而類標籤有2個,即類標籤集合c=,分別表示適合戶外運動和不適合戶外運動,其實是乙個二分類問題。

我們已經計算過資訊增益,這裡直接列出來,如下所示:

資料集d包含14個訓練樣本,其中屬於類別「yes」的有9個,屬於類別「no」的有5個,則計算其資訊熵:

1info(d) = -9/14 * log2(9/14) - 5/14 * log2(5/14) = 0.940

下面對屬性集中每個屬性分別計算資訊熵,如下所示:

1info(outlook) = 5/14 * [- 2/5 * log2(2/5) – 3/5 * log2(3/5)] + 4/14 * [ - 4/4 * log2(4/4) - 0/4 * log2(0/4)] + 5/14 * [ - 3/5 * log2(3/5) – 2/5 * log2(2/5)] = 0.694

2info(temperature) = 4/14 * [- 2/4 * log2(2/4) – 2/4 * log2(2/4)] + 6/14 * [ - 4/6 * log2(4/6) - 2/6 * log2(2/6)] + 4/14 * [ - 3/4 * log2(3/4) – 1/4 * log2(1/4)] = 0.911

3info(humidity) = 7/14 * [- 3/7 * log2(3/7) – 4/7 * log2(4/7)] + 7/14 * [ - 6/7 * log2(6/7) - 1/7 * log2(1/7)] = 0.789

4info(windy) = 6/14 * [- 3/6 * log2(3/6) – 3/6 * log2(3/6)] + 8/14 * [ - 6/8 * log2(6/8) - 2/8 * log2(2/8)] = 0.892

根據上面的資料,我們可以計算選擇第乙個根結點所依賴的資訊增益值,計算如下所示:

1gain(outlook) = info(d) - info(outlook) = 0.940 - 0.694 = 0.246

2gain(temperature) = info(d) - info(temperature) = 0.940 - 0.911 = 0.029

3gain(humidity) = info(d) - info(humidity) = 0.940 - 0.789 = 0.151

4gain(windy) = info(d) - info(windy) = 0.940 - 0.892 = 0.048

接下來,我們計算**資訊度量h(v):

屬性outlook有3個取值,其中sunny有5個樣本、rainy有5個樣本、overcast有4個樣本,則

1h(outlook) = - 5/14 * log2(5/14) - 5/14 * log2(5/14) - 4/14 * log2(4/14) = 1.577406282852345

屬性temperature有3個取值,其中hot有4個樣本、mild有6個樣本、cool有4個樣本,則

1h(temperature) = - 4/14 * log2(4/14) - 6/14 * log2(6/14) - 4/14 * log2(4/14) = 1.5566567074628228

屬性humidity有2個取值,其中normal有7個樣本、high有7個樣本,則

1h(humidity) = - 7/14 * log2(7/14) - 7/14 * log2(7/14) = 1.0

屬性windy有2個取值,其中true有6個樣本、false有8個樣本,則

1h(windy) = - 6/14 * log2(6/14) - 8/14 * log2(8/14) = 0.9852281360342516

根據上面計算結果,我們可以計算資訊增益率,如下所示:

1igr(outlook) = info(outlook) / h(outlook) = 0.246/1.577406282852345 = 0.15595221261270145

2igr(temperature) = info(temperature) / h(temperature) = 0.029 / 1.5566567074628228 = 0.018629669509642094

3igr(humidity) = info(humidity) / h(humidity) = 0.151/1.0 = 0.151

4igr(windy) = info(windy) / h(windy) = 0.048/0.9852281360342516 = 0.048719680492692784

根據計算得到的資訊增益率進行選擇屬性集中的屬性作為決策樹結點,對該結點進行**。

c4.5演算法的優點是:產生的分類規則易於理解,準確率較高。

c4.5演算法的缺點是:在構造樹的過程中,需要對資料集進行多次的順序掃瞄和排序,因而導致演算法的低效。

需要特別說明的是:當根據某一類屬性的資訊曾益完成某類屬性的節點構造後,進行下一類屬性選擇時,需要在該類屬性的相應屬性選擇項下重新計算滿足該類屬性條件專案下的樣本的資訊增益率(),而不是根據在全樣本空間中的資訊增益來進行屬性選擇;如:當在天氣為晴時,選擇下一級節點屬性,不應該直接選擇濕度屬性,而應該在天氣為晴的樣本空間中重新計算屬性增益後,根據計算結果選擇屬性。

C4 5演算法詳解

首先,c4.5是決策樹演算法的一種。決策樹演算法作為一種分類演算法,目標就是將具有p維特徵的n個樣本分到c個類別中去。相當於做乙個投影,c f n 將樣本經過一種變換賦予一種類別標籤。決策樹為了達到這一目的,可以把分類的過程表示成一棵樹,每次通過選擇乙個特徵pi來進行分叉。那麼怎樣選擇分叉的特徵呢?...

R語言 決策樹演算法(C4 5和CART)的實現

決策樹演算法的實現 一 c4.5演算法的實現 a 需要的包 sampling party library sampling library party sampling用於實現資料分層隨機抽樣,構造訓練集和測試集。party用於實現決策樹演算法 另外,還可以設定隨機數種子,可以獲得相同的隨機數。方便...

C4 5 演算法對於連續性屬性的處理方法介紹

c4.5既可以處理離散型屬性,也可以處理連續性屬性。在選擇某節點上的分枝屬性時,對於離散型描述屬性,c4.5的處理方法與id3相同。對離散分布 且取值數目 3的特徵的處理 c4.5決策樹可以支援多叉樹的形式,因此對於數目大於等於3的離散特徵,可以採用多分叉的形式 對於連續分布的特徵,其處理方法是 先...