from math import log# 初始化数据集
def createDataSet():dataSet=[[1, 1, 'yes'],[1, 1, 'yes'],[1, 0, 'no'],[0, 1, 'no'],[0, 1, 'no'],]labels = ["without water", "flippers"]return dataSet, labels# 计算数据集结点的熵增
def calShannonEnt(dataset):labelCount = {}numEntries = len(dataset)for fratVec in dataset:label = fratVec[-1]if label not in labelCount.keys():labelCount[label]=0labelCount[label]+=1shanNonEnt = 0.0for key in labelCount:prob = float(labelCount[key])/numEntriesshanNonEnt = -prob*log(prob,2)return shanNonEnt# 切割数据集
def splitDataSet(dataset, axis, value):retDataSet = []for featVec in dataset:if(featVec[axis]==value):reduceFeatVec = featVec[:axis]reduceFeatVec.extend(featVec[axis+1:])retDataSet.append(reduceFeatVec)return  retDataSet# 选择信息增益最大的特征
def chooseBestFeatureSplit(dataset):bestFeature = -1bestInfo = 0.0featureCount = len(dataset[0]) - 1baseEntrpy = calShannonEnt(dataset)for i in range(featureCount):featureList = [example[i] for example in dataset]uniqueVal = set(featureList)newEntrop = 0.0for value in uniqueVal:# 分开算正例和反例,然后加起来subDataSet = splitDataSet(dataset,i,value)prob = len(subDataSet)/float(len(dataset))newEntrop+=prob*calShannonEnt(subDataSet)infoGain = baseEntrpy - newEntrop# 得到某特征信息增益# 比较看哪个特征的信息增益最大if(infoGain>bestInfo):bestInfo = infoGainbestFeature = i# 返回最优特征值return bestFeature# 递归的创建树
def createTree(dataset,labels):classList = [example[-1] for example in dataset]if classList.count(classList[0]) == len(classList):  # 类别完全相同则停止划分return classList[0]bestFeature = chooseBestFeatureSplit(dataset)bestFeatLabel = labels[bestFeature]myTree = {bestFeatLabel: {}}del (labels[bestFeature])featValues = [example[bestFeature] for example in dataset]uniqueVals = set(featValues)for value in uniqueVals:subLabels = labels[:]# 列出剩余的所有特征myTree[bestFeatLabel][value] = createTree(splitDataSet(dataset,bestFeature,value), subLabels)# 类似汉诺塔,数据集渐渐变小,从不断变小的数据集中选择最优特征return myTree# 测试主函数
if __name__ == '__main__':dataset,label = createDataSet()print(createTree(dataset,label))

决策树ID3简单实现相关推荐

  1. ++代码实现 感知机的原理_决策树ID3原理及R语言python代码实现(西瓜书)

    决策树ID3原理及R语言python代码实现(西瓜书) 摘要: 决策树是机器学习中一种非常常见的分类与回归方法,可以认为是if-else结构的规则.分类决策树是由节点和有向边组成的树形结构,节点表示特 ...

  2. 决策树ID3与C4.5

    决策树ID3与C4.5 参考极客时间<数据分析实战45讲>17章 决策树的生成     决策树的生成会经历两个阶段:构造和剪枝 构造     构造就是生成一颗完整的决策树.简单来说,构造的 ...

  3. 机器学习算法 04 —— 决策树(ID3、C4.5、CART,剪枝,特征提取,回归决策树)

    文章目录 系列文章 决策树 1 决策树算法简介 2 决策树分类的原理 2.1 信息熵 2.2 决策树划分依据-信息增益(ID3) 2.3 决策树划分依据-信息增益率(C4.5) 2.4 决策树划分依据 ...

  4. 机器学习算法—决策树(ID3)算法

    机器学习--决策树(ID3)算法 1.决策树(ID3)算法 1.1 算法引入 我们首先以一个分类问题开始,假设我们有这样一份样本数据: 我们的目标是想通过色泽.根蒂.敲声.纹理.脐部.触感来判断这是不 ...

  5. 决策树ID3,C4.5,CART算法及实现

    文章目录 一.决策树 1.画法 2.决策树的剪枝 3.挑西瓜决策树 3.1利用信息增益选择最优划分属性 3.2python代码实现 二.sk-learn库对西瓜数据集,分别进行ID3.C4.5和CAR ...

  6. 决策树ID3、决策树C4.5、决策树CART、CART树的生成、树的剪枝、从ID3到CART、从决策树生成规则、决策树优缺点

    决策树ID3.决策树C4.5.决策树CART.CART树的生成.树的剪枝.从ID3到CART.从决策树生成规则.决策树优缺点 目录

  7. 决策树---ID3算法

    决策树---ID3算法   决策树: 以天气数据库的训练数据为例. Outlook Temperature Humidity Windy PlayGolf? sunny 85 85 FALSE no ...

  8. python决策树id3算法_python实现决策树ID3算法

    一.决策树概论 决策树是根据训练数据集,按属性跟类型,构建一棵树形结构.可以按照这棵树的结构,对测试数据进行分类.同时决策树也可以用来处理预测问题(回归). 二.决策树ID3的原理 有多种类型的决策树 ...

  9. 决策树ID3算法[分类算法]

    ID3分类算法的编码实现 1 <?php 2 /* 3 *决策树ID3算法(分类算法的实现) 4 */ 5 6 7 8 /* 9 10 *求信息增益Grain(S1,S2) 11 12 */ 1 ...

最新文章

  1. 用C#操纵IIS(代码)
  2. 理论优美的深度信念网络,Hinton老爷子北大最新演讲
  3. How to track an installation through client log-fi
  4. 洛谷P1402 酒店之王(二分图)
  5. 接口测试--apipost变量使用(一)
  6. 2004-11-28+ 认识Duwamish 7.0(3)错误处理
  7. 华三 h3c STP生成树保护配置
  8. 异步FIFO设计与实现及相关问题
  9. 数据库根据字段查询对应所在的表或者对应的数据库
  10. html如何变成xls格式文件怎么打开,XLSHTML 文件扩展名: 它是什么以及如何打开它?...
  11. 2022-05-30 无法验证是否已安装所需的Microsoft更新KB2919355
  12. 从致敬KAWS系列盲盒大火,看“NFT+盲盒”玩法的想象空间
  13. 常见的状态码及错误信息提示
  14. 浅谈产业界与学术界的合作研究
  15. WLAN没有有效的IP配置,无Internet安全(开放)
  16. 姿态角(Euler角):yaw pitch roll
  17. 分享崔庆才的一些学习经验和生活感悟
  18. 在BST(二叉搜索树)中查找介于给定范围之内的值
  19. idea 撤销和反撤销快捷键
  20. 在c语言中while与do-while,c语言中while与do while循环的主要区别是什么

热门文章

  1. 网页请求localhost可以,但是请求ip地址就会出现连接超时
  2. 1.3 nuclei sdk Makefile分析
  3. 本地文件上传FTP或远程目录
  4. 云-移动手机端项目总结
  5. 2023除夕倒计时~HTML代码
  6. 描述: 一注完整的双色球彩票号码由5个红色号码,2个蓝色号码组成 共七位数注意: 只要刷新一次页面 让球发生一次变化
  7. FSSC22000认证咨询,本程序适用与食品安全体系中的产品危害信息收集、分析和评估等所有活动
  8. 通过迅雷下载谷歌浏览器下载的内容
  9. 第五章 组合逻辑电路设计
  10. 2020 BNUZ 国庆欢乐赛 题解