主要簡單介紹了id3、c4.5、cart決策樹如何確定不同屬性的順序。
id3:資訊熵增益
c4.5:增益率
cart:gini不純度
1. id3
資訊熵計算:
h = sum(-pi*log2(pi))
例子:***
agelabel05
01101
0510
100首先看label的資訊熵:label分為兩類:概率都是1/2,則:-2/4log2(2/4)+(-2/4)log(2/4)=1
age的資訊熵:age主要有5,10兩類,對於age=5,-1/2log2(1/2)+(-1/2)log(1/2)=1,
同樣對於10而言:-1/2log2(1/2)+(-1/2)log(1/2)=1,那麼:對於age整體的資訊熵:
1/21+1/21=1,資訊增益=label資訊熵-age資訊熵 = 0
同樣可以計算對於***的資訊熵:-1/1log(1/1)=0;-2/3log2(2/3)+(-1/3)log2(1/3)
總體***熵為:1/40+3/4*(-2/3log2(2/3)+(-1/3)log2(1/3))=0.688
根據資訊熵增益,則屬性***在前,age在後。
2. c4.5
c4.5主要為解決id3熵等於label熵的情況問題,對於極端資料,如:上述**,新增一列,為class,class取值分別為1,2,3,4;那麼根據計算熵的公式情況:其對應的熵均為:
-1/1log2(1/1)=0,從而class的資訊增益為1;顯然class在前不是最好的分類順序,因此提出了資訊增益率的概念:計算公式在資訊增益基礎上增加了乙個懲罰項:類別本身的熵,類似於label的熵計算,其後增益率具體公式為:類別x資訊增益熵/類別x自身資訊熵
h = sum(-pilog2(pi))/sum(-qi*log2(qi)),如針對class的例子,已知其資訊增益熵為1,下面計算自身資訊熵:(-1/4)*log2(1/4)+(-1/4)*log2(1/4)+(-1/4)*log2(1/4)+(-1/4)*log2(1/4)=2,那麼class的資訊增益率為:1/2=0.5;針對***:(-1/4)log2(1/4)+(-3/4)log2(3/4)=0.811,***資訊增益率為:0.688/0.811=0.8489;同樣,可以計算針對age的資訊增益率:(-2/4)log2(2/4)+(-2/4)log2(2/4)=1 1/1 = 1,由資訊增益率可以看出,最優選擇為:class;由於該案例資料偏少,可以首先以class為點,隨著資料量的增大,其自身資訊熵主鍵偏向於1。
3. cart
cart:分類和回歸樹,利用gini不純度確定不同屬性的順序,gini不純度公式為:
1-sum(np.power(pi,2))
如上案例:針對***計算其gini:首先***一共兩類:0/1,其中0的裡面label兩個為0,乙個為1,那麼1-((2/3)(2/3)+(1/3)(1/3))=4/9 對於1而言:1-(1/1)=0,從而***的gini為:
4/9(3/4)+0(1/4)=1/3 針對age同樣,下面附上針對某一類檢視其gini的**:
def
getgini
(data,column,target)
:#data:資料 column:列名 target:目標列名 data:dataframe格式
column_value_count = data[column]
.value_counts(
) gini_value =
0for i in column_value_count.index:
probability_i = data[target]
[(data[column]
==i)
].value_counts()/
(column_value_count[i]
) gini =
1- np.power(probability_i,2)
.sum()
gini_value = gini_value + gini *
(column_value_count[i]
/data.shape[0]
)return gini_value
由於cart為二叉樹,因此資料屬性排序出第乙個之後,需要進行二叉樹分類,其分類方式根據目標任務分類以及回歸有所不同,如果目標任務為分類,則採用gini進行二分類,選出最合適的資料分類,若果為回歸:採用sum(x-x平均數)**2的形式進行分類,二者均是找出最小數值進行分類。
職業婚姻
label
老師已婚1上班
已婚1上班未婚0學生
未婚1對上述**資料進行二分類,已職業為案例考慮是分類任務:gini進行分析:
[(老師)(上班、學生)]、[(上班)(老師、學生)]、[(學生)(老師、上班)]這三種情況,
分別計算這三種情況下對應的label的gini數:
(1-(1/1))*1/4+(1-(2/3)**2-(1/3)**2)*3/4 = 1/3
(1-(1/2)**2-(1/2)**2)*1/2+(1-(2/2)**2)*1/2=1/4
(1-1/1)*1/4+(1-(2/3)**2-(1/3)**2)*3/4=1/3…那麼根據[(上班)(老師、學生)]進行二分類,分為上班一類,老師、學生一類,然後各個類進行gini係數分類,重新計算下一層不同屬性的順序。如果針對的問題為回歸問題:
例子對樣本集中的所有屬性a的取值(比如有3.9, 5.2, 2.3, 4.4)公升序排序(2.3, 3.9, 4.4, 5.2),然後取屬性a相鄰兩個取值的平均值(3.1, 4.15, 4.8)作為閾值進行二分類,然後計算不同閾值下的資訊增益/基尼指數。
機器學習分類器 決策樹
一 決策樹 經常使用決策樹來處理分類問題,決策樹也是最經常使用的資料探勘演算法,不需要了解機器學習的知識,就能搞明白決策樹是如何工作的。knn演算法可以完成很多分類任務,但它最大的缺點就是無法給出資料的內在含義,決策樹的主要優勢在於資料形式非常容易理解 決策樹能夠讀取資料集合,其乙個重要任務是為了資...
機器學習筆記 分類決策樹
剪枝處理 三種典型的決策樹學習演算法的比較 決策樹作為一種基本的分類與回歸方法,它由結點和有向邊組成。結點有兩種型別 決策樹是一種基於規則的方法,在樹的每個決策節點處,根據判斷結果進入乙個分支,反覆執行這項操作直至到達葉子結點,得到 結果。而規則是通過訓練得到的,而不是人工制定的。決策樹學習的關鍵是...
機器學習之決策樹分類器
決策樹,當下比較流行的有三種分類器,c4.5,id3,cart,不過大同小異,主要的區別就是選擇的目標函式不同,id3使用的是資訊增益,c4.5使用資訊增益率,cart使用的是gini係數。具體的原理就不說了,去翻翻別的博主吧,下面給出本人測試的小demo,幫助各位學者更快入手。coding utf...