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

版权声明:本文为博主原创文章,可以随便转载 https://blog.csdn.net/appleyuchi/article/details/83027964

代碼來自參考鏈接:
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下运行通过

猜你喜欢

转载自blog.csdn.net/appleyuchi/article/details/83027964
今日推荐