決策樹之C4 5演算法學習

2021-09-08 13:08:03 字數 4105 閱讀 9387

決策樹是一種預測模型,它由決策節點,分支和葉節點三個部分組成。

決策節點代表乙個樣本測試,通常代表待分類樣本的某個屬性,在該屬性上的不同測試結果代表乙個分支;分支表示某個決策節點的不同取值。每乙個葉節點代表一種可能的分類結果。

使用訓練集對決策樹演算法進行訓練,得到乙個決策樹模型。利用模型對未知樣本(類別未知)的類別推斷時。從決策樹根節點開始,從上到下搜尋,直到沿某分支到達葉節點,葉節點的類別標籤就是該未知樣本的類別。

網上有個樣例能夠非常形象的說明利用決策樹決策的過程(母親給女兒選物件的過程)。例如以下圖所看到的:

女兒:多大年紀了?

母親:26

。女兒:長的帥不帥?

母親:挺帥的。

女兒:收入高不?

母親:不算非常高。中等情況。

女兒:是公務員不?

母親:是,在稅務局上班呢。

女兒:那好,我去見見。

再看乙個樣例:資料集例如以下圖所看到的,共同擁有14個樣本,每乙個樣本有4個屬性,分別表示天氣,溫度。濕度,是否颳風。最後一列代表分類結果,能夠理解為是否適合出去郊遊(play)。

以下是利用上面樣本構建的決策樹:

依據構建的模型,當再來乙個樣本那麼我們就能夠從根節點開始向下搜尋最後得到:no play。

細緻思考下,這有點類似fp-tree演算法中的構造樹過程。可是絕不一樣。其實,同樣的資料集,我們能夠構建非常多棵決策樹,也不一定以outlook 作為根節點。fp-tree僅僅是單純將全部樣本資訊儲存到乙個樹上。而決策樹顯然有乙個選取節點屬性進行分類的過程。

那麼問題來了?該怎樣選取屬性作為分類屬性,將樣本分為更小的子集?什麼時候結束終止決策樹的增長,使構建的決策樹既對訓練樣本準確分類。並且對於未知樣本(測試樣本)也可以準確預測,可能的策略是全部的樣本都屬於同一類別或全部樣本屬性值都相等。

不同的決策樹演算法採用的策略不同,以下主要介紹c4.5 演算法,主要學習c4.5選取節點劃分子集的策略。

c4.5演算法是由澳大利亞雪梨大學ross quinlan教授在2023年基於id3演算法的改進提出的,它可以處理連續型屬性或離散型屬性的資料;可以處理具有缺失值的屬性資料;使用資訊增益率而不是資訊增益作為決策樹的屬性選擇標準;對生成枝剪枝。減少過擬合。

例如以下為決策樹演算法框架:

treegrowth(e, f)//e--訓練集  f—屬性集

if stopping_cond(e, f) = true then //達到停止**條件(子集全部樣本同為一類或其它)

leaf = createnode() //構建葉子結點

leaf.label = classify(e) //葉子結點類別標籤

return leaf

elseroot = createnode()//建立結點

root.test_cond = find_best_split(e, f) 確定選擇哪個屬性作為劃分更小子集//

令 v =

for each v v do

ev =

child = treegrowth(ev, f)

//加入child為root的子節點,並將邊(root——>child)標記為v

end for

end if

return root

主要過程:首先用根節點代表乙個給定的資料集;然後從根節點開始(包含根節點)在每乙個節點上選擇乙個屬性,使結點資料集劃分(一棵樹**為幾棵樹)為更小的子集(子樹);直到使用某個屬性。其子集中全部樣本都屬於乙個類別。才停止**。

而當中節點怎樣選擇屬性。正是c4.5要做的。

前面已經提到過:c4.5 使用資訊增益率而不是資訊增益作為決策樹的屬性選擇標準。以下從熵開始逐步解釋:

熵:資訊理論中對熵的解釋。熵確定了要編碼集合s中隨意成員的分類所須要的最少二進位制位數     

pi 為集合s中第i類所佔的比例。(詳細舉例見後面例項)

理解」最少」:

1. 對於2分類問題。用乙個二進位制位1和0描寫敘述足以分類;對於4分類問題。至少須要用兩個二進位制位描寫敘述00 01 10 11;c分類 log2(c)

2. 對於分類問題。還要考慮類的比例(樣本不平衡問題)。m+n個樣本當中m個樣本分類表示的二進位制位數和n個樣本表示的二進位制位數不同樣,全部熵的定義還存在著一種加權平均的思想。

簡單來說,它刻畫了隨意樣本集的純度,越純,熵越小。

對於二分類問題,熵在[0,1]之間,假設全部樣本都屬於同一類。熵為0,這個時候給定乙個樣本,類別就是確定的。假設不同的樣本各佔一半,熵為1=1/2+1/2。這個時候假設給定乙個樣本來分類,就全然無法確定了,就好像我們拋硬幣全然無法預測它是正面還是反面朝上一樣。

對於c分類問題,熵在[0 log2(c)]之間。

c4.5中用到的幾個公式:

1 訓練集的資訊熵

當中 m代表分類數。pi為資料集中每乙個類別所佔樣本總數的比例。

2劃分資訊熵----如果選擇屬性a劃分資料集s。計算屬性a對集合s的劃分資訊熵值

case 1:a為離散型別,有k個不同取值。依據屬性的k個不同取值將s劃分為k各子集,則屬性a劃分s的劃分資訊熵為:(當中 |si|   |s| 表示包括的樣本個數)

case 2: a為連續型資料,則按屬性a的取值遞增排序,將每對相鄰值的中點看作可能的**點,對每乙個可能的**點。計算:

當中。sl

和sr分別相應於該**點劃分的左右兩部分子集。選擇entropya

(s)值最小的**點作為屬性a的最佳**點,並以該最佳**點按屬性a對集合s的劃分熵值作為屬性a劃分s的熵值。

3資訊增益 

按屬性a劃分資料集

s的資訊增益gain(s,a)為樣本集

s的熵減去按屬性

a劃分s後的樣本子集的熵,即

4**資訊

利用引入屬性的**資訊來調節資訊增益

5 資訊增益率

資訊增益率將**資訊作為分母。屬性取值數目越大,**資訊值越大,從而部分抵消了屬性取值數目所帶來的影響。

相比id3直接使用資訊熵的增益選取最佳屬性,避免因某屬性有較多分類取值因而有較大的資訊熵,從而更easy被選中作為劃分屬性的情況。

公式略多,看得眼花繚亂。事實上就是為了得到資訊增益率。

以下以部落格開始介紹的天氣資料集為例,進行屬性選取。

詳細過程如圖所看到的:

根節點擊取outlook屬性後就得到例如以下劃分:

遞迴進行如上過程。就得到了部落格開頭的決策樹。

本文引用了部分《資料探勘與機器學習weka應用技術與實踐》中的內容,並改動了原書中決策樹計算錯誤之處,書中outlook的資訊增益率為0.44是錯誤的。 

參考文獻: 《資料探勘與機器學習weka應用技術與實踐》 

決策樹之C4 5演算法

c4.5演算法是機器學習中的乙個重要的決策樹演算法,它是對id3演算法的改進,相對於id3演算法主要有以下幾個改進 1 用資訊增益率來選擇屬性 2 在決策樹的構造過程中對樹進行剪枝 3 對非離散資料也能處理 4 能夠對不完整資料進行處理 接下來分別詳細講述這幾點的改進方案 1 用資訊增益率來選擇屬性...

決策樹之C4 5演算法

1.採用資訊增益率 因為 id3 在計算的時候,傾向於選擇取值多的屬性。為了避免這個問題,c4.5 採用資訊增益率的方式來選擇屬性。資訊增益率 資訊增益 屬性熵,具體的計算公式這裡省略。當屬性有很多值的時候,相當於被劃分成了許多份,雖然資訊增益變大了,但是對於 c4.5 來說,屬性熵也會變大,所以整...

決策樹 C4 5演算法

c4.5演算法是用於生成決策樹的的一種經典演算法,是id3演算法的一種延伸和優化。改進了點 1 通過資訊增益率選擇 屬性,克服了id3演算法中通過資訊增益傾向於選擇擁有多個屬性值的屬性作為 屬性的不足 2 能夠處理離散型和連續型的屬性型別,即將連續型的屬性進行離散化處理 3 構造決策樹之後進行剪枝操...