決策樹的生成之1 ID3演算法

2021-09-27 15:14:48 字數 2258 閱讀 6418

從資料集構造決策樹演算法所需要的子功能模組,其工作原理如下:得到原始資料集,然後基於最好的屬性值劃分資料集,由於特徵值可能多於兩個,因此可能存在大於兩個分支的資料集劃分。第一次劃分之後,資料集被向下傳遞到樹的分支的下乙個結點。在這個結點上,我們可以再次

劃分資料,因此我們可以採用遞迴的原則處理資料集。

遞迴結束的條件是:

1) 程式遍歷完所有劃分資料集的屬性;

2)每個分支下的所有實例都具有相同的分類;

3)當前結點包含的樣本集合為空時,不能劃分。

在第2種情形下,我們把當前結點標記為葉結點,並將其類別設定為該結點所含樣本最多的類別,任何到達葉結點的資料必然屬於葉結點的分類;在第3種情形下,同樣把當前結點標記為葉結點,但將其類別設定為其父結點所含樣本最多的類別。

id3演算法原型見於 j.r quinlan 的博士**,是基礎理論較為完善,使用較為廣泛的決策樹模型,在此基礎上 j.r quinlan 進行優化後,陸續推出了c4.5 和 c5.0 決策樹演算法,我們先從id3開始,再討論如何從id3逐漸優化至c4.5。

id3演算法的核心是在決策樹各個結點應用資訊增益準則選擇特徵,遞迴地構建決策樹。具體方法是:

1)從根結點開始,對結點計算所有可能的特徵的資訊增益;

2)選擇資訊增益最大的特徵作為結點的特徵,由該特徵的不同取值建立子結點;

3)再對子結點呼叫以上方法,構建決策樹;

4)直到所有特徵的資訊增益均很小或沒有特徵可以選擇為止,最後得到乙個決策樹。

#id3演算法

"""函式功能:基於最⼤資訊增益切分資料集,遞迴構建決策樹

引數說明:

dataset:原始資料集(最後一列是標籤)

返回:mytree:字典形式的樹

"""def

createtree

(dataset)

: featlist =

list

(dataset.columns)

# 提取出資料集所有的列

classlist = dataset.iloc[:,

-1].value_counts(

)# 獲取最後一列類標籤

# 判斷最多標籤數目是否等於資料集行數,或者資料集是否只有一列

if classlist[0]

==dataset.shape[0]

or dataset.shape[1]

==1:return classlist.index[0]

# 如果是,返回類標籤

axis = bestsplit(dataset)

# 確定出當前最佳切分列的索引

bestfeat = featlist[axis]

# 獲取該索引對應的特徵

mytree =

}# 採用字典巢狀的方式儲存樹資訊

del featlist[axis]

# 刪除當前特徵

valuelist =

set(dataset.iloc[

:,axis]

)# 提取最佳切分列所有屬性值

for value in valuelist:

# 對每乙個屬性值遞迴建樹

mytree[bestfeat]

[value]

= createtree(mysplit(dataset,axis,value)

)return mytree

mytree = createtree(dataset)

#呼叫函式

mytree

執行結果

},

1:'no'

}}

id3演算法侷限主要源於區域性最優化條件,即資訊增益的計算方法,其侷限性主要有以下幾點:

1)分支度越高(分類水平越多)的離散變數往往子結點的總資訊熵更小,id3是按照某一列進行切分,有一些列的分類可能不會對結果有足夠好的指示。極端情況下取id作為切分字段,每個分類的純度都是100%,因此這樣的分類方式是沒有效益的。

2)不能直接處理連續型變量,若要使用id3處理連續型變量,則首先需要對連續變量進行離散化。

3)對缺失值較為敏感,使用id3之前需要提前對缺失值進行處理。

4)沒有剪枝的設定,容易導致過擬合,即在訓練集上表現很好,測試集上表現很差。

關於剪枝和過擬合相關問題,我們會在其後的博文中進行詳細討論,此處先討論其他侷限性如何解決。

對於id3的諸多優化措施,最終也構成了c4.5演算法的核心內容(詳見下篇博文)。

決策樹 ID3演算法

id3演算法通過計算每個屬性的資訊增益,認為資訊增益越大屬性越優,每次劃分選取資訊增益最大的屬性為劃分標準,重複這個過程,直到構成一棵決策樹。資訊熵是描述事件給我們的驚訝程度,如果所有事件的概率均等,那熵值大,驚訝程度低。如果有一事件的概率極高而其他極低,熵值便低,驚訝程度大。其計算公式如下 資訊增...

決策樹 ID3演算法

一 決策樹基本概念 在機器學習中,決策樹是乙個 模型,它代表的是物件屬性與物件值之間的一種對映關係。本質上決策樹是通 過一系列規則對資料進行分類的過程。下圖為經典決策樹例項。如圖所示,例項是由 屬性 值 對表示的 例項是用一系列固定的屬性和他們的值構成。目標函式具有離散的輸出值 上圖給每個例項賦予乙...

決策樹ID3演算法

typeerror dict keys object does not support indexing 9.typeerror dict keys object does not support indexing 這個問題是python版本的問題 如果使用的是python2 firststr my...