目录

  • 西瓜数据集2.0
  • 求信息熵
  • 第一次划分
  • 第二次划分
  • 最终结果

西瓜数据集2.0

编号,色泽,根蒂,敲声,纹理,脐部,触感,好瓜
1,   青绿,蜷缩,浊响,清晰,凹陷,硬滑,是
2,   乌黑,蜷缩,沉闷,清晰,凹陷,硬滑,是
3,   乌黑,蜷缩,浊响,清晰,凹陷,硬滑,是
4,   青绿,蜷缩,沉闷,清晰,凹陷,硬滑,是
5,   浅白,蜷缩,浊响,清晰,凹陷,硬滑,是
6,   青绿,稍蜷,浊响,清晰,稍凹,软粘,是
7,   乌黑,稍蜷,浊响,稍糊,稍凹,软粘,是
8,   乌黑,稍蜷,浊响,清晰,稍凹,硬滑,是
9,   乌黑,稍蜷,沉闷,稍糊,稍凹,硬滑,否
10,  青绿,硬挺,清脆,清晰,平坦,软粘,否
11,  浅白,硬挺,清脆,模糊,平坦,硬滑,否
12,  浅白,蜷缩,浊响,模糊,平坦,软粘,否
13,  青绿,稍蜷,浊响,稍糊,凹陷,硬滑,否
14,  浅白,稍蜷,沉闷,稍糊,凹陷,硬滑,否
15,  乌黑,稍蜷,浊响,清晰,稍凹,软粘,否
16,  浅白,蜷缩,浊响,模糊,平坦,硬滑,否
17,  青绿,蜷缩,沉闷,稍糊,稍凹,硬滑,否

求信息熵

import mathdef ent(*ps: float) -> float:sum = 0.0for p in ps:if p == 0.0:sum += 0else:sum += -1 * p * math.log(p, 2)return sum

第一次划分

# 初始时的信息熵
p1 = 8 / 17
p2 = 9 / 17
Ent = ent(p1, p2) = 0.9975025463691153# 色泽青绿的信息熵
p1 = 3 / 6
p2 = 3 / 6
Ent1_1 = ent(p1, p2) = 1.0
# 色泽乌黑的信息熵
p1 = 4 / 6
p2 = 2 / 6
Ent1_2 = ent(p1, p2) = 0.9182958340544896
# 色泽浅白的信息熵
p1 = 1 / 5
p2 = 4 / 5
Ent1_3 = ent(p1, p2) = 0.7219280948873623
# 色泽的信息熵
Ent1 = 6 / 17 * Ent1_1 + 6 / 17 * Ent1_2 + 5 / 17 * Ent1_3 = 0.88937738110375# 根蒂蜷缩的信息熵
p1 = 5 / 8
p2 = 3 / 8
Ent2_1 = ent(p1, p2) = 0.9544340029249649
# 根蒂稍蜷的信息熵
p1 = 3 / 7
p2 = 4 / 7
Ent2_2 = ent(p1, p2) = 0.9852281360342516
# 根蒂硬挺的信息熵
p1 = 0.0
p2 = 2 / 2
Ent2_3 = -(p2 * math.log(p2, 2)) = 0.0
# 根蒂的信息熵
Ent2 = 8 / 17 * Ent2_1 + 7 / 17 * Ent2_2 + 2 / 17 * Ent2_3 = 0.8548275868023224# 敲声浊响的信息熵
p1 = 6 / 10
p2 = 4 / 10
Ent3_1 = ent(p1, p2) = 0.9709505944546686
# 敲声沉闷的信息熵
p1 = 2 / 5
p2 = 3 / 5
Ent3_2 = ent(p1, p2) = 0.9709505944546686
# 敲声清脆的信息熵
p1 = 0.0
p2 = 2 / 2
Ent3_3 = -(p2 * math.log(p2, 2)) = 0.0
# 敲声的信息熵
Ent3 = 10 / 17 * Ent3_1 + 5 / 17 * Ent3_2 + 2 / 17 * Ent3_3 = 0.8567211127541194# 纹理清晰的信息熵
p1 = 7 / 9
p2 =  2 / 9
Ent4_1 = ent(p1, p2) = 0.7642045065086203
# 纹理稍糊的信息熵
p1 = 1 / 5
p2 = 4 / 5
Ent4_2 = ent(p1, p2) = 0.7219280948873623
# 纹理模糊的信息熵
p1 = 0.0
p2 = 3 / 3
Ent4_3 = -(p2 * math.log(p2, 2)) = 0.0
# 纹理的信息熵
Ent4 = 9 / 17 * Ent4_1 + 5 / 17 * Ent4_2 + 3 / 17 * Ent4_3 = 0.6169106490008467# 脐部凹陷的信息熵
p1 = 5 / 7
p2 = 2 / 7
Ent5_1 = ent(p1, p2) = 0.863120568566631
# 脐部稍凹的信息熵
p1 = 3 / 6
p2 = 3 / 6
Ent5_2 = ent(p1, p2) = 1.0
# 脐部平坦的信息熵
p1 = 0.0
p2 = 4 / 4
Ent5_3 = -(p2 * math.log(p2, 2)) = 0.0
# 脐部的信息熵
Ent5 = 7 / 17 * Ent5_1 + 6 / 17 * Ent5_2 + 4 / 17 * Ent5_3 = 0.7083437635274363# 触感硬滑的信息熵
p1 = 6 / 12
p2 = 6 / 12
Ent6_1 = ent(p1, p2) = 1.0
# 触感软粘的信息熵
p1 = 2 / 5
p2 = 3 / 5
Ent6_2 = ent(p1, p2) = 0.9709505944546686
# 触感的信息熵
Ent6 = 12 / 17 * Ent6_1 + 5 / 17 * Ent6_2 = 0.9914560571925497

纹理的信息增益(0.9975025463691153 - 0.6169106490008467 = 0.3805918973682686)最大,所以 纹理 被选为划分属性

第二次划分

模糊分支 都是坏瓜,划分完毕,下面 以 稍糊分支 为例

# 初始时的信息熵
p1 = 1 / 5
p2 = 4 / 5
Ent = ent(p1, p2) = 0.7219280948873623# 色泽青绿的信息熵
p1 = 0.0
p2 = 2 / 2
Ent1_1 = 0.0
# 色泽乌黑的信息熵
p1 = 1 / 2
p2 = 1 / 2
Ent1_2 = ent(p1, p2) = 1.0
# 色泽浅白的信息熵
p1 = 0.0
p2 = 1 / 1
Ent1_3 = 0.0
# 色泽的信息熵
Ent1 = 2 / 5 * Ent1_1 + 2 / 5 * Ent1_2 + 1 / 5 * Ent1_3 = 0.4# 根蒂蜷缩的信息熵
p1 = 0.0
p2 = 1 / 1
Ent2_1 = 0
# 根蒂稍蜷的信息熵
p1 = 1 / 4
p2 = 3 / 4
Ent2_2 = ent(p1, p2) = 0.8112781244591328
# 根蒂硬挺的信息熵
p1 = 0.0
p2 = 0.0
Ent2_3 = 0.0
# 根蒂的信息熵
Ent2 = 1 / 5 * Ent2_1 + 4 / 5 * Ent2_2 + 0 * Ent2_3 = 0.64902249956730624# 敲声浊响的信息熵
p1 = 1 / 2
p2 = 1 / 2
Ent3_1 = ent(p1, p2) = 1.0
# 敲声沉闷的信息熵
p1 = 0.0
p2 = 3 / 3
Ent3_2 = 0
# 敲声清脆的信息熵
p1 = 0.0
p2 = 0.0
Ent3_3 = 0.0
# 敲声的信息熵
Ent3 = 2 / 5* Ent3_1 + 3 / 5 * Ent3_2 + 0.0 * Ent3_3 = 0.4# 脐部凹陷的信息熵
p1 = 0.0
p2 = 2 / 2
Ent5_1 = 0.0
# 脐部稍凹的信息熵
p1 = 1 / 3
p2 = 2 / 3
Ent5_2 = ent(p1, p2) = 0.9182958340544896
# 脐部平坦的信息熵
p1 = 0.0
p2 = 0.0
Ent5_3 = 0.0
# 脐部的信息熵
Ent5 = 2 / 5 * Ent5_1 + 3 / 5 * Ent5_2 + 0 * Ent5_3 = 0.5509775004326938# 触感硬滑的信息熵
p1 = 0.0
p2 = 4 / 4
Ent6_1 = 0.0
# 触感软粘的信息熵
p1 = 1 / 1
p2 = 0.0
Ent6_2 = 0.0
# 触感的信息熵
Ent6 = 4 / 5* Ent6_1 + 1 / 5* Ent6_2 = 0.0

触感的信息增益(0.7219280948873623 - 0.0 = 0.7219280948873623)最大,所以 触感 被选为划分属性

最终结果

剩下的划分,具体操作 和 上述两次划分 是 一样的,不再赘述。

ID3 决策树(基于西瓜数据集2.0)相关推荐

  1. 周志华《机器学习》3.5答案-编程实现线性判别分析,并给出西瓜数据集3.0α上的结果

    #机器学习线性判别分析3.5题 import numpy as np import matplotlib.pyplot as plt data = [[0.697, 0.460, 1],[0.774, ...

  2. 机器学习《西瓜书》9.4解答——k-means算法:编程实现k均值算法,设置三组不同的k值、三组不同初始中心点,在西瓜数据集4.0上进行实验比较,并讨论什么样的初始中心有助于得到好结果。

    1.运行结果:(注:图中方块标注的点为随机选取的初始样本点) k=2时: 本次选取的2个初始向量为[[0.243, 0.267], [0.719, 0.103]] 共进行61轮 共耗时0.10s k= ...

  3. k-Means聚类算法实现--基于西瓜数据4.0

    本文是k均值聚类算法源代码 语言:Python:数据集:西瓜数据4.0.xlsx 使用的库: import numpy as np import math import xlrd import ran ...

  4. 基于朴素贝叶斯分类器的西瓜数据集 2.0 预测分类_第十章:利用Python实现朴素贝叶斯模型

    免责声明:本文是通过网络收集并结合自身学习等途径合法获取,仅作为学习交流使用,其版权归出版社或者原创作者所有,并不对涉及的版权问题负责.若原创作者或者出版社认为侵权,请联系及时联系,我将立即删除文章, ...

  5. 基于朴素贝叶斯分类器的西瓜数据集 2.0 预测分类_机器学习之朴素贝叶斯

    1.贝叶斯原理 朴素贝叶斯分类(Naive Bayesian,NB)源于贝叶斯理论,是一类基于概率的分类器,其基本思想:假设样本属性之间相互独立,对于给定的待分类项,求解在此项出现的情况下其他各个类别 ...

  6. 基于朴素贝叶斯分类器的西瓜数据集 2.0 预测分类_朴素贝叶斯为什么被称为“朴素”?...

    一.基本理解 1.朴素贝叶斯分类器: 例:如果有一种水果具有红.椭圆形.直径约3英寸等特征,则该水果可以被判定为是苹果. 尽管这些特征相互依赖或者有些特征由其他特征决定,然而朴素贝叶斯分类器认为这些属 ...

  7. 基于朴素贝叶斯分类器的西瓜数据集 2.0 预测分类_朴素贝叶斯(转载自Morgan)...

    什么是朴素贝叶斯 要搞懂朴素贝叶斯分类,首先需要了解什么是贝叶斯定理和特征条件独立假设,朴素贝叶斯算法就是基于这两个来实现的分类方法. 贝叶斯定理 贝叶斯定理通俗点讲就是求在事件 B 已经发生的前提下 ...

  8. 《机器学习(周志华)》 西瓜数据集3.0

    书上的一个常用数据集 编号,色泽,根蒂,敲声,纹理,脐部,触感,密度,含糖率,好瓜 1,青绿,蜷缩,浊响,清晰,凹陷,硬滑,0.697,0.46,是 2,乌黑,蜷缩,沉闷,清晰,凹陷,硬滑,0.774 ...

  9. 基于信息增益的ID3决策树介绍。

    这篇文章介绍一下一种常见的机器学习算法:决策树.这篇文章的主要是根据<机器学习>中的知识点汇总的,其中使用了<机器学习实战>的代码.关于决策树中基本信息以及公式更加推荐看一看& ...

  10. 西瓜书 课后习题6.3 SVM,bpa神经网络,ID3决策树 比较

    import csv from sklearn import svm import numpy as np from math import log import operatordef dataSe ...

最新文章

  1. KDD 2019高维稀疏数据上的深度学习Workshop论文汇总
  2. 搞对象的时候走神儿了
  3. Unity 3D 一个简单的角色控制脚本
  4. Lesson 4.6 逻辑回归的手动实现
  5. 深入浅出Netty之四 Client请求处理
  6. 把字符串中的数字找出来并按照升序排序
  7. Android——本地服务基础(一)
  8. Highcharts教程--把js代码从html中抽离出来,放到单独的一个js文件中。由html页面调用...
  9. 一个障碍,就是一个超越自我的契机
  10. 浏览器弹窗怎么设置显示url_谷歌浏览器Chrome76版本地址栏不显示HTTPS和WWW怎么办?...
  11. JSP自定义标签入门实例
  12. ELK下钉钉邮件告警通知
  13. Python学习(24)--面向对象编程1
  14. 计算机显示的网络,如何设置在电脑右下角显示网络连接图标
  15. 最高100,000美元大奖,2021腾讯广告算法大赛开启
  16. SqlServer2008操作总结
  17. K-Means聚类算法原理及实现
  18. 一个牛人给JAVA初学者的建议(很受用)
  19. js连接mqtt进行通信
  20. Android几种数据存储的对比(MMKV、DataStore、SharedPreference)

热门文章

  1. sis新地址_“这是什么梗?”,互联网上的新梗老梗如何影响你?
  2. 软件著作权申请流程(2021版)
  3. 防火墙系列---思科防火墙 ASA
  4. alienware 15 r2 linux驱动下载,外星人笔记本驱动-外星人Alienware驱动下载 官方版-下载啦...
  5. 使用 webservice 实现 RPC 调用
  6. 诺基亚linux系统手机系统下载,智能手机操作平台大翻盘 诺基亚拥抱Linux
  7. html化学式编辑器,常用的化学式编辑器有哪些?4款化学式编辑器分享
  8. android 印章,android 印章 控件
  9. HTML网页设计结课作业~仿小米商城网站纯HTML模板源码(HTML+CSS)
  10. 图像傅里叶变换的MATLAB实现