1. 程式人生 > >周志華《機器學習》圖4.4和圖4.9繪制(轉載+增加熵顯示功能)

周志華《機器學習》圖4.4和圖4.9繪制(轉載+增加熵顯示功能)

程式碼來自參考連結:
https://blog.csdn.net/leafage_m/article/details/79629074

本文的貢獻是:
①修正參考連結中,演算法第3種情況中的投票問題的相關程式碼,
原文程式碼函式makeTreeFull有誤,會導致生成圖4.4的"虛擬節點"(淺白色分支下面的葉子節點)時會隨機出現好瓜和壞瓜
②在原有程式碼基礎上增加熵顯示功能

----------------------------演算法虛擬碼-----------------------------------------------------

在這裡插入圖片描述
這裡的A{a*}的意思是已經劃分過的特徵就不要再使用了.
所以是差集運算
因為決策樹的話,離散特徵在作為最佳劃分特徵時,只能使用一次

-------------------------------------------參考連結中作者歸納的3種截止條件---------------------------------------
虛擬碼中結束遞迴的三個條件:

第2行:此時樣本D中的樣本全部都屬於一種類別,比如都是好瓜,那麼此時就說明不需要再劃分了。

第5行:如果此時屬性集合為空或者此時所有的樣本的各個屬性值都相同,比如剩了三個西瓜,這三個西瓜的根蒂、色澤、敲聲都是一樣的,這時候無法再根據屬性進行劃分了,所以在這些剩下的西瓜中找出數目最多的類別。

第12:如果資料集在某一個屬性上沒有樣本,比如在經過多次劃分,剩下的西瓜的色澤已經沒有淺白這種瓜了,我們就讓此刻淺白這種瓜的類別等於當前節點的父節點中樣本數目最多的類別。


也就是說,ID3演算法講到兩種"投票"
一種是訓練集中存在一部分資料集,他們的屬性取值完全一致,但是類別不同時
進行投票,也就是演算法虛擬碼中的第2種情況
一種是訓練集中不存在這部分資料,需要補全葉子節點,這個時候,以父節點中,佔比例最多的類別作為"虛擬節點"的類別,也就是投票,對應演算法虛擬碼中的第3種情況

-------------最終繪制結果如下-------------------------------------------
所有第3種情況生成的葉子節點,都帶有"(虛)"字樣,
表示該葉子節點對應的資料在原訓練集中不存在.

周志華<機器學習>第78頁-圖-4.4–西瓜資料集2.0(程式碼自帶資料集)
在這裡插入圖片描述

周志華<機器學習>第-89頁-圖4.9–西瓜資料集2.0a(程式碼自帶資料集)
在這裡插入圖片描述

注意,上面兩個圖中每個節點顯示的是"當前資料集"的"標籤列"的資訊熵.
另外,熵只能用來計算節點包含的資訊,不能跨層描述樹枝.
不能描述整個分類事件,整個分類事件需要用概念來描述,
概念上需要注意這一點.

完整程式碼如下:
https://github.com/appleyuchi/Decision_Tree_Prune/tree/master/處理離散資料的決策樹-ID3完整版-python-視覺化-圖4.4和4.9/python3版本/帶熵顯示-修改完
在python3.5下執行通過