决策树ID3简单实现
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简单实现相关推荐
- ++代码实现 感知机的原理_决策树ID3原理及R语言python代码实现(西瓜书)
决策树ID3原理及R语言python代码实现(西瓜书) 摘要: 决策树是机器学习中一种非常常见的分类与回归方法,可以认为是if-else结构的规则.分类决策树是由节点和有向边组成的树形结构,节点表示特 ...
- 决策树ID3与C4.5
决策树ID3与C4.5 参考极客时间<数据分析实战45讲>17章 决策树的生成 决策树的生成会经历两个阶段:构造和剪枝 构造 构造就是生成一颗完整的决策树.简单来说,构造的 ...
- 机器学习算法 04 —— 决策树(ID3、C4.5、CART,剪枝,特征提取,回归决策树)
文章目录 系列文章 决策树 1 决策树算法简介 2 决策树分类的原理 2.1 信息熵 2.2 决策树划分依据-信息增益(ID3) 2.3 决策树划分依据-信息增益率(C4.5) 2.4 决策树划分依据 ...
- 机器学习算法—决策树(ID3)算法
机器学习--决策树(ID3)算法 1.决策树(ID3)算法 1.1 算法引入 我们首先以一个分类问题开始,假设我们有这样一份样本数据: 我们的目标是想通过色泽.根蒂.敲声.纹理.脐部.触感来判断这是不 ...
- 决策树ID3,C4.5,CART算法及实现
文章目录 一.决策树 1.画法 2.决策树的剪枝 3.挑西瓜决策树 3.1利用信息增益选择最优划分属性 3.2python代码实现 二.sk-learn库对西瓜数据集,分别进行ID3.C4.5和CAR ...
- 决策树ID3、决策树C4.5、决策树CART、CART树的生成、树的剪枝、从ID3到CART、从决策树生成规则、决策树优缺点
决策树ID3.决策树C4.5.决策树CART.CART树的生成.树的剪枝.从ID3到CART.从决策树生成规则.决策树优缺点 目录
- 决策树---ID3算法
决策树---ID3算法 决策树: 以天气数据库的训练数据为例. Outlook Temperature Humidity Windy PlayGolf? sunny 85 85 FALSE no ...
- python决策树id3算法_python实现决策树ID3算法
一.决策树概论 决策树是根据训练数据集,按属性跟类型,构建一棵树形结构.可以按照这棵树的结构,对测试数据进行分类.同时决策树也可以用来处理预测问题(回归). 二.决策树ID3的原理 有多种类型的决策树 ...
- 决策树ID3算法[分类算法]
ID3分类算法的编码实现 1 <?php 2 /* 3 *决策树ID3算法(分类算法的实现) 4 */ 5 6 7 8 /* 9 10 *求信息增益Grain(S1,S2) 11 12 */ 1 ...
最新文章
- 用C#操纵IIS(代码)
- 理论优美的深度信念网络,Hinton老爷子北大最新演讲
- How to track an installation through client log-fi
- 洛谷P1402 酒店之王(二分图)
- 接口测试--apipost变量使用(一)
- 2004-11-28+ 认识Duwamish 7.0(3)错误处理
- 华三 h3c STP生成树保护配置
- 异步FIFO设计与实现及相关问题
- 数据库根据字段查询对应所在的表或者对应的数据库
- html如何变成xls格式文件怎么打开,XLSHTML 文件扩展名: 它是什么以及如何打开它?...
- 2022-05-30 无法验证是否已安装所需的Microsoft更新KB2919355
- 从致敬KAWS系列盲盒大火,看“NFT+盲盒”玩法的想象空间
- 常见的状态码及错误信息提示
- 浅谈产业界与学术界的合作研究
- WLAN没有有效的IP配置,无Internet安全(开放)
- 姿态角(Euler角):yaw pitch roll
- 分享崔庆才的一些学习经验和生活感悟
- 在BST(二叉搜索树)中查找介于给定范围之内的值
- idea 撤销和反撤销快捷键
- 在c语言中while与do-while,c语言中while与do while循环的主要区别是什么