昨天完成了決策樹id3演算法的編碼,心情真的很激動呀,雖然是針對具體資料而生的,但是還是很自豪的說。在這個過程中對id3演算法也加深了印象。
決策樹學習主要是特徵選擇(實則是特徵屬性的排優)和基於id3演算法決策樹的生成,對於決策樹的剪枝本文並不討論。
上圖為示例資料集d,第一列到第六列的意義為:id號,年齡,是否有工作,是否有房子,貸款信譽,分類類別。0表示否,1表示是。
資訊熵:就決策的過程來說,熵是描述乙個決策過程的混亂程度,如果選擇過程是特定的則熵為0,如果決策過程是隨機的則熵是最大的。熵的定義公式如下:
其中x是隨機變數,在上面示例資料中x1=「是」,x2=「否」,即資料集d的分類;n為資料集類別的數目;pi為某個類別在資料集d總類別中的頻率。
條件熵h(y|x):在隨機變數x的條件下y的不確定性。它的定義公式如下所示:
其中a表示某乙個特徵,例如可以為「貸款信譽」;n為貸款信譽特徵的分類,此時n=3,表示資料集d被特徵a分成了3個子資料集d1、d2、d3;k為分類的類別數目2;di表示第i個子資料集的總數目;dik表示第i個子資料集並且類別為k的數量。
尼瑪,你要是問我這些算式為啥表示熵那我也母雞呀,但是可以根據熵的定義式畫乙個座標圖表示一下,二分支時真的是p=0.5時h的值最大,也就是概率都是一半一半,聰明如計算機也不知道要選哪乙個分支了。。。
下面重點來了,資訊增益: g(d,a) = h(d) - h(d|a)
此將作為我們選取分支的最重要指標。在直觀上理解,g(d,a)表示由於特徵屬性a而使得對資料集d分類的不確定性減少的程度。所以啊,這個值是越大越好的。依次遞迴(因為未確定類別的資料集是在逐漸減少的)計算,可以對資料集各個屬性來排優。
1)首先我們應該明確可能有三種終止條件:
1. 並不是所有的特徵屬性都用上,即決策樹已經建立好了(訓練資料集分類完成)但是屬性沒用完;
2. 特徵集都用上了但是資料集沒有分完,這時最後的未確定的資料集就按照多數表決(誰多算誰)來決定;
3. 特徵集太多用不完(用完可能出現過擬合),這時應該為資訊增益g(d,a)確定乙個閾值e,當g
2)根據g值選擇乙個當前最優的特徵屬性a,在未確定分類集合中把已經分出的資料剔除。
3)根據1)判斷是否滿足終止條件,如果不滿足再轉到2)。
id3演算法是機器學習的入門演算法,思想簡單,但編碼也是乙個苦力活呀,我硬是敲了2.5天的**,智商捉襟見肘。。。有空附上**
決策樹 ID3構建決策樹
coding utf 8 from math import log import operator 建立訓練資料集 defcreatedataset dataset 1,1,yes 1,1,yes 1,0,no 0,1,no 0,1,no 資料集的最後乙個元素作為該資料的標籤,是否是魚 labels...
決策樹的ID3演算法實現
下表是乙個有關挑選西瓜的經驗資料,其中分類屬性是d 是否好瓜 編號 c1 色澤 c2 根蒂 c3 敲聲 c4 紋理 c5 臍部 c6 觸感 d 好瓜 x1 青綠 蜷縮 濁響 清晰 凹陷 硬滑 是 x2 烏黑 蜷縮 沉悶 清晰 凹陷 硬滑 是 x3 烏黑 蜷縮 濁響 清晰 凹陷 硬滑 是 x4 青綠 ...
決策樹之 ID3
id3 是一種用來構建決策樹的演算法,它根據資訊增益來進行屬性選擇。關於決策樹,請參見 此處主要介紹 id3 演算法如何利用資訊增益選擇屬性。資訊熵,簡稱 熵 假定訓練集中目標屬性為 c c的取值為 c1 c2,cm 每個取值佔的比例為p1 p2,pm 則資訊熵的定義為 en trop y s en...