##计算利用信息增益作为分类属性的ID3算法

x

'd', 'c', 'd', 'a', 'a', 'a', 'b', 'b'), byrow = F,

ncol=3)

#计算一列数据的信息熵

CalculateEntropy1

function(data){

temp

table(data)

temp

temp[temp!=0]

return(-sum(log2(temp/sum(temp))*(temp/sum(temp))))

}

#计算两列的信息熵 第二列作为分类目标的列

CalculateEntropy2

function(data){

temp

1])

name

names(temp)

entropy

for ( i in name){

temp1

2]

entropy

}

return(sum((temp/sum(temp))*entropy))

}

#信息增益率的分裂度量值

Split_Entropy

return(CalculateEntropy1(data[,

1]))

}

ID3

#分类变量唯一

if(length(unique(data$result)) ==

1){

tmp

sep=""),paste(table(data$result), collapse=":"),

sep=",")

cat(paste(paste(rep(" ", k+2), collapse=""),"分类结果:",data$result[1],

tmp,"*\n"))

return(0)

}

#设置节点最少的值 默认设置为3

if(length(data$result)<5){

max_result

T))[1]

tmp

sep=""),paste(table(data$result), collapse=":"),

sep=",")

cat(paste(paste(rep(" ", k+2), collapse=""),"分类结果:",max_result,

tmp, "*\n"))

return(0)

}

##没有变量了 但是分类结果不是唯一, 选择次数最多的一个

if((length(names(data)) ==

1)){

max_result

T))[1]

tmp

sep=""),paste(table(data$result), collapse=":"),

sep=",")

cat(paste(paste(rep(" ", k+2), collapse=""),"分类结果:",max_result,

tmp, "*\n"))

return(0)

}

cat("\n")

## 信息熵

entropy

CalculateEntropy1(data$result)

lables

names(data)

lable

temp

entropy1

##开始遍历 寻找最小熵值的列

for( i in 1:(ncol(data)-1)){

#     信息增益

#     temp1

ncol(data))])

#     信息增益率

temp1

ncol(data))])/Split_Entropy(data[,c(i, ncol(data))])

if(temp1

< temp)

{

temp

lable

}

}

#    cat(paste(

paste(rep("  ", k),

collapse=""),lable,"="))

#cat("[\n") 将已利用的分类变量

nextlables

lables[lables != lable]

for(value in

unlist(unique(data[lable]))){

#

cat(paste(paste(rep("  ", k+1),

collapse=""), value, "---"))

cat(paste( paste(rep("  ", k),

collapse=""),lable,"=", value, sep=""))

ID3(subset(data,

data[lable]==value, select = nextlables), k+2)

}

# cat("]")

}

测试数据查看:​

存在的问题:1)如过选取的某一个分类列时存在多个值,则会简单的分裂为多个子树,结果还需优化剪枝,剪枝函数需要添加

2)虽然后信息增益比的计算,但是不适合用于连续性值,​只适合于简单的离散型变量分类,只能作为简单实现用

参考资料1)http://blog.csdn.net/crystal_tyan/article/details/42130851​

2)http://xy.tuxi.com.cn/167/1677903.html

id3与软件测试,ID3算法的实现相关推荐

  1. id3与软件测试,ID3

    ID3,一般是位于一个mp3文件的开头或末尾的若干字节内,附加了关于该mp3的歌手,标题,专辑名称,年代,风格等信息,该信息就被称为ID3信息,ID3信息分为两个版本,v1和v2版. 其中:v1版的I ...

  2. 机器学习题5:请简述ID3算法的实现步骤,并利用ID3算法构建天气数据集的决策树模型,实现决策树的可视化。

    ID3算法的实现步骤: 输入:数据集(训练集)S及属性A 输出:属性A对训练数据集S的信息增益 ① 先将S作为根节点,其目标属性y有c个类别属性.假设S中出现的概率,计算数据集S的信息熵. ② 假设属 ...

  3. 计算机图形学 区域填充,计算机图形学 区域填充算法的实现

    . '. 实验四区域填充算法的实现班级 08信计学号 58 姓名陈瑞雪分数 一.实验目的和要求: 1.掌握区域填充算法基本知识 2.理解区域的表示和类型,能正确区分四连通和八连通的区域 3.了解区域填 ...

  4. OpenCV中图像旋转(warpAffine)算法的实现过程

    在OpenCV中,目前并没有现成的函数直接用来实现图像旋转,它是用仿射变换函数cv::warpAffine来实现的,此函数目前支持4种插值算法,最近邻.双线性.双三次.兰索斯插值,如果传进去的参数为基 ...

  5. JAVA实现中点画线_实验1-中点画线和Bresenham画线算法的实现

    <实验1-中点画线和Bresenham画线算法的实现>由会员分享,可在线阅读,更多相关<实验1-中点画线和Bresenham画线算法的实现(9页珍藏版)>请在人人文库网上搜索. ...

  6. python边缘检测代码_python Canny边缘检测算法的实现

    图像边缘信息主要集中在高频段,通常说图像锐化或检测边缘,实质就是高频滤波.我们知道微分运算是求信号的变化率,具有加强高频分量的作用.在空域运算中来说,对图像的锐化就是计算微分.对于数字图像的离散信号, ...

  7. 干货回顾丨TensorFlow四种Cross Entropy算法的实现和应用

    交叉熵介绍 交叉熵(Cross Entropy)是Loss函数的一种(也称为损失函数或代价函数),用于描述模型预测值与真实值的差距大小,常见的Loss函数就是均方平方差(Mean Squared Er ...

  8. C++基础代码--20余种数据结构和算法的实现

    C++基础代码--20余种数据结构和算法的实现 过年了,闲来无事,翻阅起以前写的代码,无意间找到了大学时写的一套C++工具集,主要是关于数据结构和算法.以及语言层面的工具类.过去好几年了,现在几乎已经 ...

  9. 选择性模糊及其算法的实现。

    选择性模糊及其算法的实现. 我们常见的模糊算法比如均值模糊.高斯模糊等其基本的过程都是计算一个像素周边的的某个领域内,相关像素的某个特征值的累加和及对应的权重,然后得到结果值.比如均值模糊的各像素的权 ...

最新文章

  1. 对NumPy中dot()函数的理解(亲测,矩阵算法)
  2. 阅读《软件工程—理论方法与实践》第五章心得体会
  3. JAVA读写Properties属性文件
  4. 为什么 Redis 单线程能达到百万+QPS?
  5. 洛谷 P4147 玉蟾宫 (最大子矩形问题)
  6. call_user_func_array 调用回调函数
  7. UE4源码下载与配置sin文件
  8. ipv4和计算机地址是什么意思,什么是IP地址?IPV4和IPV6又有什么区别?
  9. WSAData结构体的作用
  10. FOCUS projects 5 Pro(照片景深处理软件)官方正式版V5.34.03722 | 景深合成软件下载
  11. error RC1015: cannot open include file 'sal.h'.
  12. matplotlib学习—画等高线图
  13. matlab中kmeans聚类算法
  14. vue + 百度地图 +点位标注
  15. 喜讯|山东百华鞋业上沂南新闻了!
  16. 7位格雷码计算风向_基于单片机的风速风向检测系统设计
  17. 读 富爸爸财务自由之路 之感
  18. java中的整型常量,在Java中,整型常量不可以是?
  19. python-asyncio异步基础
  20. java拒绝访问_java.io.FileNotFoundException: D:\xxx\yyy (拒绝访问。)问题

热门文章

  1. (翻译)60分钟入门深度学习工具-PyTorch
  2. 搜索推荐炼丹笔记:单网络内部集成学习
  3. 社交重构、游戏革新,万物皆可元宇宙?这场大会给你讲清楚了|活动预告
  4. 网易云信携手武汉三好教育,共筑教育援疆的「云桥梁」
  5. 资讯|WebRTC M91 更新
  6. 网易智慧企业 Node.js 实践(2)| 平滑发布和前端代码
  7. 如何使用Java与Mysql进行数据交互
  8. NPS的几个技术点(在Win 2003中称为Internet 验证服务)
  9. angular 动态取到的html片段 在页面的展示
  10. Java删除文件和目录