決策樹算法內容來至於《統計學習與方法》李航,《機器學習》周志華,以及《機器學習實戰》Peter HarringTon,相互學習,不足之處請你們多多指教python
本卷的大綱爲算法
1 決策樹的概念機器學習
2 特徵選擇,信息熵,條件熵ide
3 決策樹的生成函數
4 決策樹的剪枝 性能
決策樹是一顆基於分類與迴歸的方法,本章主要討論分類的決策樹。決策樹的模型呈樹形結構,在分類問題中,表示基於特徵對實例進行分類的過程。學習
決策樹的學習過程包括:特徵選擇,決策樹的生成,和決策樹修剪。測試
決策樹的優勢:模型具備可讀性,分類速度快,學習時,利用訓練數據,根據損失函數最小化的原則創建決策樹模型,預測時,對新的數據,利用決策樹模型進行分類。spa
決策樹由結點和有向邊組成,結點有兩個類型:內部結點和葉節點,內部結點表示一個特徵或者屬性,葉結點表示一個類別。code
決策樹能夠轉換爲if-then模型,內部結點的特徵對應規則的條件,葉節點表示對應規則下的結論。
決策樹的損失函數一般是正則化的最大似然函數。決策樹學習的策略是以損失函數爲目標函數的最小化。
決策樹構建的過程:
(1)開始構建根結點,將全部訓練數據都放在根結點上。
(2)選擇一個最優特徵,按照這個特徵將訓練數據集分割成子集,使得各個子集有一個在當前條件下的最好分類。
(3)若是這個子集已經基本上正確分類,那麼構建葉節點。
(4)若是還有子集不能被基本正確分類,那麼就對這些子集選着新的最優特徵,繼續對子集進行分割。遞歸下去直到全部訓練數據的子集被基本正確分類。最後每一個子集都被分到葉節點上。造成一
個決策樹。
決策樹學習的過程包括特徵選擇,決策樹的生成,以及決策樹的剪枝,因爲決策樹表示一個條件機率分佈,因此深淺不一樣的決策樹對應不一樣複雜度的機率模型,決策樹的生成對應模型的局部選擇
決策樹的剪枝對應模型的全局選擇,決策樹的生成只考慮局部最優,相對的,決策樹的剪枝表示全局最優。
特徵選擇在於選取對訓練數據具備分類特徵的特徵,提升決策樹的學習效率,特徵選擇準則基於信息增益和信息增益比。
2.1信息熵
信息熵的概念:熵表示隨機變量不肯定性的度量,熵越大,隨機變量的不肯定性就越大。信息熵的定義以下:
設X是有限個離散隨機變量,其機率分佈爲:
隨機變量X的熵定義爲:
一般,若是5.1中的對數以2爲底,則信息熵的單位爲比特,以天然對數爲底,則信息熵的單位爲鈉特(nat).
當隨機變量只取二個值的時候,X的分佈爲
P(x=1) = p
P(x=0) = 1-p
H(x)=-plog2p-(1-p)log2(1-p)
此時熵的曲線爲:
對應的Python代碼爲:
#!/usr/bin/python #-*-encoding:utf-8 -*- import numpy as np import matplotlib as mpl import matplotlib.pyplot as plt import math mpl.rcParams['font.sans-serif'] = [u'SimHei'] mpl.rcParams['axes.unicode_minus'] = False def entropy(p): return -p*np.log2(p) - (1-p)*np.log2(1-p) if __name__=="__main__": p = np.linspace(0,1,200) y = entropy(p) fig = plt.figure(facecolor='w') plt.title(u" 信息熵曲線") plt.plot(p,y,'g-',linewidth=2,label=u'信息熵曲線') plt.legend(loc='upper right') plt.grid(True) plt.show()
2.2條件熵
設隨機變量(x,y),其聯合機率分佈爲
條件熵的H(Y|X)表示在已知隨機變量X的條件下,隨機變量Y的不肯定性
當熵和條件熵有數據估計(特別是極大似然估計)獲得時,所對應的熵爲經驗熵,對應的條件熵爲經驗條件熵。
2.3 信息增益
信息增益表示得知特徵X的信息而使得類Y的信息的不肯定性減小的程度。
信息增益的定義以下:特徵A對訓練數據集D的信息增益g(D,A),定義爲集合D的經驗熵H(D)與特徵A給定條件下D的經驗條件熵H(D|A)之差,即
通常的,熵H(Y)和條件熵(Y|X)之差稱之爲互信息,決策樹學習中的信息增益等價於訓練數據集中類與特徵的互信息。
根據信息增益選取特徵的方法是:對數據集(或者子集)D,計算其每一個特徵的信息增益,並比較他們的大小,選擇信息增益最大的特徵。
2.4信息熵增益比:
以信息熵增益做爲劃分訓練數據集的特徵,存在偏向與特徵選取比較多的特徵的問題,使用信息熵增益比能夠對這個問題進行矯正,信息熵增益比的定義以下:
特徵A對訓練數據集D的信息增益比gR(D,A)定義爲其信息增益g(D,A)與訓練數據集D關於特徵A的值的熵HA(D)之比:
其中:
決策樹主要有ID3生成算法和C4.5生成算法,ID3算法的核心在於決策樹各個節點上運用信息增益選擇決策樹,C4.5選擇信息熵增益比爲準則選擇決策樹。
3.1 ID3算法
ID3決策樹算法的核心是在決策樹的各個節點上運用信息熵增益做爲選擇特徵,遞歸的構建決策樹,具體算法流程是:
從根節點開始,對結點計算全部可能的特徵的信息增益,選擇信息增益最大的特徵做爲節點的特徵,由該特徵的不一樣取值創建子節點,在對子節點遞歸的調用上面的方法,構建決策樹,直到全部的特徵
信息增益均很小或者沒有特徵能夠選擇爲止,獲得最後一個決策樹。ID3至關於用極大似然法進行機率模型的估計。
3.2 C4.5算法
C4.5算法決策樹算法的核心是在決策樹的各個節點上運用信息熵增益比做爲選擇特徵,遞歸的構建決策樹,具體算法流程是:
從根節點開始,對結點計算全部可能的特徵的信息增益比,選擇信息增益比最大的特徵做爲節點的特徵,由該特徵的不一樣取值創建子節點,在對子節點遞歸的調用上面的方法,構建決策樹,直到全部的
徵的信息增益比均很小或者沒有特徵能夠選擇爲止,獲得最後一個決策樹。
決策樹生成的算法遞歸的產生決策樹,直到不能繼續下去爲止,這樣產生的決策樹每每對訓練數據的分類很準確,對未知的測試數據分類不許確,出現過擬合的狀況,過擬合的緣由在於學習時候過多
考慮如何提升訓練數據的正確分類,構造了過於複雜的決策樹,解決和個問題是對決策樹進行剪枝。
決策樹剪枝的策略有預剪枝和後剪枝。主要考察剪枝先後驗證集的精度。或者極小化決策樹總體的損失函數。重點關注:後剪枝
4.1後剪枝
策略:極小化決策樹總體的損失函數或者是代價函數來實現,等價於正則化極大似然估計。設樹T的葉節點個數爲|T|,t是樹T的葉節點,該葉節點有NT個樣本,其中k類的樣本點有Ntk個k=1,2,3,4……k,決策樹的損失函數爲
C(T)表示模型對訓練數據的預測偏差,即模型對訓練數據的擬合程度,|T| 表示模型的複雜程度,參數α≥0 控制二者之間的影響,一般較大的α 促使選擇簡單的模型樹,較小的α 促使選擇複雜的模型樹
α=0表示自是考慮模型和訓練數據的擬合程度,不考慮模型的複雜度。
剪枝就是當α肯定時候,選擇損失函數最小的模型,即損失函數最小的子樹,當α肯定時,子樹越大,每每訓練數據擬合越好,可是模型的複雜程度也越高,反之,子樹越小,模型複雜度越低,損失數正好平衡兩者的關係。
4.2 樹的剪枝算法
輸入:生成算法產生的整個樹T,參數α
輸出:修剪後的子樹T
算法流程:
(1)計算每一個結點的經驗熵
(2)遞歸向上的從樹的葉節點進行回縮
(3)若是父節點的損失函數C(T)小於子節點的損失函數C(T),則父節點變回新的葉節點。
(4)返回2繼續執行,直到不能繼續爲止,獲得損失函數最小的子樹T
優勢:後剪枝決策樹一般比預剪枝決策樹保留更多的分支,通常狀況下,後剪枝決策樹的欠擬合的風險很小,泛化性能每每優於預剪枝的決策樹。可是後剪枝決策樹須要在徹底生成決策樹後進行,並自底向上對樹中每一個非葉節點進行考察,所以訓練的時間開銷要比未剪枝決策樹和預剪枝決策樹都要大得多。
相互學習,不足之處,請多多指教!