周志華《機器學習》圖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下運行通過
總結
以上是生活随笔為你收集整理的周志華《機器學習》圖4.4和图4.9繪制(轉載+增加熵顯示功能)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ID3决策树中连续值的处理+周志华《機器
- 下一篇: python2与python3代码互相转