淺談對於《機器學習》(周志華)第四章4.2.3基尼係數與CART決策樹學習算法的個人理解

《機器學習》一書有兩個星期沒看,進度停滯在了第四章的結尾部分。
重讀這一大部分內容,原著對基尼係數和CART決策樹僅有短短半頁的描述,通過從網絡上的調查和文獻的閱讀對其有了更詳細的理解。

基尼係數(Gini index)

從我看到過得內容中,我認爲較爲好理解的定義應該是:
定義基尼指數(基尼不純度):表示在樣本集合中一個隨機選中的樣本被分錯的概率。
如上面定義所說的,基尼係數反映的就是樣本被分錯的概率,簡單直觀地來說,基尼係數反映了從數據集D中隨機抽取兩個樣本,類別標記不同的概率。如果我們設基尼係數爲G,設好瓜(西瓜書中所有的例子都是好瓜壞瓜)爲x,壞瓜爲y,那麼G=1-((x/(x+y))**2)-((y/(x+y))**2)。公式如下:
在這裏插入圖片描述

基尼係數反應的就是數據集的純度,Gini index與純度呈“反比”(只是比方,這種表述並不準確!)
下圖就是剛剛舉的例子(以此類推)。
在這裏插入圖片描述
綜上所述,有以下三點說明!
1、Pk表示選中的樣本屬於k類別的概率,那麼這個樣本被分錯的概率是1-Pk。
2、樣本集合中有k個類別,一個隨機選中的樣本可以屬於這k各類別樣本中的任意一個,因此對於不同類別加和即可。
3、當爲二分類時。Gini§ = 2p*(1-p)!

最後附上一個簡單的求解基尼係數的小程序

def GiniIndex(x,y):
    singleGiniIndex = 1-((x/(x+y))**2)-((y/(x+y))**2)
    return singleGiniIndex

def Gini_Index(a,b,c,d):
    left = GiniIndex(a,b)
    right = GiniIndex(c,d)
    finalGiniIndex = left*((a+b)/(a+b+c+d))+right*((c+d)/(a+b+c+d))
    return finalGiniIndex

def main():
    print(Gini_Index(105,39,34,125))

if __name__ == "__main__":
    main()

可以計算出結果
在這裏插入圖片描述

引入CART決策樹學習算法

CART是Classification and Regression Tree的簡稱,這是一種著名的決策樹學習算法,分類和迴歸任務都可使用.而CART算法與“基尼係數”掛鉤,他使用基尼係數選擇劃分屬性,比較直白的來說,CART算法就是“選擇那個使得劃分後基尼係數最小的屬性作爲最優化分屬性”.
即:a = arg min Gini_index(D,a) a∈A;*
(分類樹:基尼係數最小準則,迴歸樹與之不同,爲平方誤差最小準則!!!)

過程總結

1.設結點的訓練數據集爲D,計算現有特徵對該數據集的Gini係數。此時,對每一個特徵A,對其可能取的每個值a,根據樣本點對A=a的測試爲“是”或“否”將D分割成D1和D2兩部分,計算A=a時的Gini係數。
2.在所有可能的特徵A以及它們所有可能的切分點a中,選擇Gini係數最小的特徵及其對應的切分點作爲最優特徵與最優切分點。依最優特徵與最優切分點,從現結點生成兩個子結點,將訓練數據集依特徵分配到兩個子結點中去。
3.對兩個子結點遞歸地調用步驟l~2,直至滿足停止條件。
4.生成CART決策樹。

舉例?

我們討論的是通過CART算法生成決策樹以判斷心臟病的例子
在這裏插入圖片描述
條件分別爲:胸痛、血液循環、動脈堵塞。注意一下,如果統計的時候出現了“缺失值”,我們跳過處理即可。
假設我們已經擁有了數據,我們先來爲三種情況計算一下Gini index。
在這裏插入圖片描述
經過計算,胸痛左分支的Gini index爲0.396,右邊爲0.336,整體爲0.364,血液循環的Gini index爲0.36,動脈堵塞的Gini index爲0.381,選取最小的Gini index->Good Blood Circulation!
那麼血液循環就作爲根節點開始分支。
這之後,還要將根節點生成的分支與Gini(胸痛)以及Gini(動脈阻塞)進行比較,選取最小的進行再分支,目前看來,只要基尼係數可以下降,使其純度變高,那麼就要分支!
在這裏插入圖片描述

The process:

①Calculate all of the Gini impurity scores.
②If the node itself has the lowest score,than there is no point in separating thepatients any more and it becomes aleaf node.
③If separating the data resultsin an improvement, than pickthe separation with the lowestimpurity value.
在這裏插入圖片描述
正如上文提到的,模仿左子樹的構建方法,右子樹也就輕而易舉地構建出來了!
請注意,CART算法的缺點如下:
①無論是ID3, C4.5還是CART,在做特徵選擇的時候都是選擇最優的一個特徵來做分類決策,但是大多數,分類決策不應該是由某一個特徵決定的,而是應該由一組特徵決定的。這樣決策得到的決策樹更加準確。
②如果樣本發生一點點的改動,就會導致樹結構的劇烈改變。這個可以通過集成學習裏面的隨機森林之類的方法解決。
在這裏插入圖片描述
鳴謝以下參考書籍及網站
[1]. 周志華 機器學習 清華大學出版社,2016
[2].https://blog.csdn.net/zrh_CSDN/article/details/81022696
[3].https://blog.csdn.net/Andy_shenzl/article/details/83900499
[4].https://blog.csdn.net/waeceo/article/details/90473448
[5]. https://www.youtube.com/watch?v=g9c66TUylZ4

P.S.
想寫好一篇文章,真的會花費很多心思
我VS code的Color Theme還挺好看的吧,冷冷的感覺
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章