機器學習理論決策樹理論第二卷

決策樹內容來至於《統計學習與方法》李航,《機器學習》周志華,以及《機器學習實戰》Peter HarringTon,相互學習,不足之處請你們多多指教!python

本卷的大綱爲算法

1 CART 算法機器學習

1.1 CART 迴歸樹函數

1.2 CART 分類樹學習

2 CART 剪枝測試

3 總結spa


1 CART算法

CART分類與迴歸樹(classification and regression tree,CART)模型室友Breiman等人1984年提出,是應用普遍的決策樹方法,CART一樣由特徵選擇樹的生成以及剪枝組成,能夠用於分類,也可以用迴歸3d

CART樹的生成:決策樹的生成就是遞歸的構建二叉決策樹的過程,對迴歸樹使用平方偏差最小的準則,對分類樹使用基尼指數最小化準則,進行特徵選擇,生成二叉樹。code

1.1迴歸樹的生成(對應連續變量)

假設X與Y分別爲輸入和輸出變量,而且Y是連續變量,給定訓練數據集:blog

一個迴歸樹對應着輸入空間(特徵空間)的一個劃分以及在劃分的單元上的輸出值,假設已將輸入空間劃分爲M個單元R1,R2,……,Rm,而且每一個單元Rm上都有一個固定的輸出值Cm,因而回歸樹模型可表示爲:

當輸入空間的劃分肯定後,能夠用平方偏差

來表示迴歸樹對訓練數據的預測偏差,用平方偏差最小的準則求解每一個單元上的最優輸出值,單元Rm上的輸出值Cm的最優值C是Rm上的全部輸入實例Xi對應輸出Yi的均值。即

輸入空間的劃分:選擇第J個變量x(J)和他的取值S,做爲切分變量和切分點,並定義兩個區域

讓後尋找最優的切分變量以及最優的切分點,具體求解

對固定輸入變量J能夠找到最優切分點s:

遍歷全部的輸入變量,找到最優的切分變量j構成一對(j,s),依次將輸入空間劃分爲2個區域,接着對每一個區域重複劃分,直到知足條件爲止,這樣的迴歸樹一般稱爲最小二乘迴歸樹

1.2最小二乘迴歸樹的生成算法:

輸入:訓練數據集D;

輸出:迴歸樹f(x)

在訓練數據集所在的輸入空間中,遞歸的將每一個區域劃分爲2個子區域並決定每一個子區域上的輸出值,構建二叉樹:

(1)選擇最優切分變量j與切分點s,求解:

 

遍歷變量j,對固定的切分變量j掃描切分點s使得上述式子最小化。輸出該值對(j,s)。

(2)用選定的對(j,s)劃分區域並決定相應的輸出值

(3)繼續對兩個子區域調用步驟1和步驟2,直到知足條件。

(4)將輸入空間劃分爲M個區域R1,R2,……,Rm,生成決策樹:

 


 2 分類樹的生成

分類樹使用基尼指數做爲最優特徵,同時決定該特徵的最優二值切分點。

分類問題中,假設K個類別,樣本屬於第K類的機率爲Pk,則機率分佈的基尼係數爲:

對於二分類問題,若樣本點屬於第一個類別的機率是P,則機率分佈的基尼指數爲:

對於給定的樣本集合D,其基尼係數爲:Ck是第K類樣本的個數,k是類的個數

若是樣本集合D根據特徵A是否取得某一個可能的a被分爲2份D1,和D2,則在特徵A條件下,集合D的基尼指數定位爲:

基尼指數表示了集合D的不肯定性,基尼指數Gin(D,A)表示A= a分割後集合D的不肯定性,基尼指數越大,樣本集合的不肯定性也越大,這一點和熵相似。

基尼係數和熵的關係,能夠理解爲基尼係數是熵在x=1處的一節泰勒展開

使用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 0.5*( -p*np.log2(p) - (1-p)*np.log2(1-p))

def jini(p):
    return 2*p*(1-p)

def wucha(p):
    return 1-np.max(np.vstack((p,1-p)),0)


if __name__=="__main__":

    p = np.linspace(0,1,200)
    y = entropy(p)
    y2 = jini(p)
    y3 = wucha(p)

    fig = plt.figure(facecolor='w')
    plt.title(u"分類標準")

    plt.plot(p,y,'g-',linewidth=2,label=u'信息熵曲線')
    plt.plot(p, y2, 'r-', linewidth=2, label=u'基尼指數線')
    plt.plot(p, y3, 'b:', linewidth=2, label=u'偏差曲線')
    plt.legend(loc='upper right')
    plt.grid(True)
    plt.show()

 

2.2 CART生成算法

輸入:訓練數據D,中止計算條件

輸出:CART決策樹

具體算法以下爲:根據訓練數據集,從根節點開始,遞歸的對每一個節點進行如下操做,構建二叉樹:

(1)設訓練集數據集爲D,計算現有特徵對數據集的基尼指數,此時,對每一個特徵A,對其可能的每一個取值,根據樣本點對A=a的測試爲是或否將D分割爲D1和D2兩部分,以後計算A的基尼係數:

(2)在全部可能的特徵A以及他們全部可能的切分點a中,選擇基尼指數最小的特徵其對應的切分點做爲最優特徵和最優切分點,依最優特徵最優切分點,從現結點生成兩個子節點,將訓練數據集依

徵分配到兩個子節點中去。

(3)對兩個子節點遞歸調用(1)(2)直到知足中止條件

(4)生成CART決策樹。 


 3 CART剪枝

CART剪枝算法從徹底生長的決策樹的底端剪去一些子樹,使得決策樹變得簡單,從而可以對未知數據有更準確的預測,CART剪枝算法由兩步組成,首先從生成算法產生的決策樹T0底端開始不斷的剪

直到T0的根節點,造成一個子樹序列{T0,T1,T2……Tn};而後經過交叉驗證法驗證數據集上對子樹進行測試,從中選取最優子樹。

步驟1:剪枝,造成一個子樹序列

具體的:從整個樹的T0底端開始剪枝,對T0的任意內部結點t,對T0中的每一個內部結點t,計算

他表示剪枝後總體損失函數減小的程度,在T0中剪去g(t)獲得最小的Tt,將獲得的子樹做爲T1.同時,將最小的g(t)設置爲α1,T1爲區間[α1,α2)的最優子樹。

步驟2:在剪枝獲得的子樹序列T0,T1,……,Tn中,經過交叉認證選取最優子樹。

具體的,利用獨立的驗證數據集,測試子樹序列T0,T1,T2……,Tn中各個子樹的平均偏差或者基尼指數,平方偏差或者基尼指數最小的決策樹認爲是最優決策樹,在子樹序列中,每顆子樹T1,T2,

……,Tn應一個參數α1,α2,……,αn,因此當最優子樹肯定時,對應的αk也肯定了,即獲得了最優子樹。

 


 4 總結

決策樹算法包括三部分:特徵選擇,樹的生成和樹的剪枝,經常使用的算法有ID3,ID4.5,CART算法

特徵選擇的目的在於選取對訓練數據可以分類的特徵,特徵的選擇的關鍵是其準則,常見的準則以下:

(1)樣本集合D對特徵A的信息熵增益(ID3)其中H(D)是數據集D的熵,H(Di)是數據集Di的熵,H(D|A)是數據集D對特徵A的條件熵,Di是D中特徵A取第i個的樣本子集,Ck是D中屬於第k類的樣本子

集,是特徵A取值的個數,k是類的個數。

(2)樣本集合D對特徵A的信息增益比(C4.5),其中g(D,A)是信息增益,H(D)是數據集D的熵

(3)樣本集合的基尼係數(CART算法)

特徵A下的基尼係數:

決策樹的生成:一般使用信息增益最大,信息增益比最大,或者基尼指數最小做爲特徵選擇的準這,決策樹的生成每每是經過計算信息增益或者其餘指標,從根節點開始,遞歸的產生決策樹,這至關於

信息增益或者其餘準則不斷的選取局部最優的特徵,或將訓練集分割爲可以基本正確分類的子集

決策樹的剪枝:因爲生成的決策樹存在過擬合的問題,須要對他進行剪枝,一般決策樹剪枝有有預剪枝和後剪枝。主要考察剪枝先後驗證集的精度。或者極小化決策樹總體的損失函數。

相關文章
相關標籤/搜索