id3与软件测试,ID3算法的实现
##计算利用信息增益作为分类属性的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算法的实现相关推荐
- id3与软件测试,ID3
ID3,一般是位于一个mp3文件的开头或末尾的若干字节内,附加了关于该mp3的歌手,标题,专辑名称,年代,风格等信息,该信息就被称为ID3信息,ID3信息分为两个版本,v1和v2版. 其中:v1版的I ...
- 机器学习题5:请简述ID3算法的实现步骤,并利用ID3算法构建天气数据集的决策树模型,实现决策树的可视化。
ID3算法的实现步骤: 输入:数据集(训练集)S及属性A 输出:属性A对训练数据集S的信息增益 ① 先将S作为根节点,其目标属性y有c个类别属性.假设S中出现的概率,计算数据集S的信息熵. ② 假设属 ...
- 计算机图形学 区域填充,计算机图形学 区域填充算法的实现
. '. 实验四区域填充算法的实现班级 08信计学号 58 姓名陈瑞雪分数 一.实验目的和要求: 1.掌握区域填充算法基本知识 2.理解区域的表示和类型,能正确区分四连通和八连通的区域 3.了解区域填 ...
- OpenCV中图像旋转(warpAffine)算法的实现过程
在OpenCV中,目前并没有现成的函数直接用来实现图像旋转,它是用仿射变换函数cv::warpAffine来实现的,此函数目前支持4种插值算法,最近邻.双线性.双三次.兰索斯插值,如果传进去的参数为基 ...
- JAVA实现中点画线_实验1-中点画线和Bresenham画线算法的实现
<实验1-中点画线和Bresenham画线算法的实现>由会员分享,可在线阅读,更多相关<实验1-中点画线和Bresenham画线算法的实现(9页珍藏版)>请在人人文库网上搜索. ...
- python边缘检测代码_python Canny边缘检测算法的实现
图像边缘信息主要集中在高频段,通常说图像锐化或检测边缘,实质就是高频滤波.我们知道微分运算是求信号的变化率,具有加强高频分量的作用.在空域运算中来说,对图像的锐化就是计算微分.对于数字图像的离散信号, ...
- 干货回顾丨TensorFlow四种Cross Entropy算法的实现和应用
交叉熵介绍 交叉熵(Cross Entropy)是Loss函数的一种(也称为损失函数或代价函数),用于描述模型预测值与真实值的差距大小,常见的Loss函数就是均方平方差(Mean Squared Er ...
- C++基础代码--20余种数据结构和算法的实现
C++基础代码--20余种数据结构和算法的实现 过年了,闲来无事,翻阅起以前写的代码,无意间找到了大学时写的一套C++工具集,主要是关于数据结构和算法.以及语言层面的工具类.过去好几年了,现在几乎已经 ...
- 选择性模糊及其算法的实现。
选择性模糊及其算法的实现. 我们常见的模糊算法比如均值模糊.高斯模糊等其基本的过程都是计算一个像素周边的的某个领域内,相关像素的某个特征值的累加和及对应的权重,然后得到结果值.比如均值模糊的各像素的权 ...
最新文章
- 对NumPy中dot()函数的理解(亲测,矩阵算法)
- 阅读《软件工程—理论方法与实践》第五章心得体会
- JAVA读写Properties属性文件
- 为什么 Redis 单线程能达到百万+QPS?
- 洛谷 P4147 玉蟾宫 (最大子矩形问题)
- call_user_func_array 调用回调函数
- UE4源码下载与配置sin文件
- ipv4和计算机地址是什么意思,什么是IP地址?IPV4和IPV6又有什么区别?
- WSAData结构体的作用
- FOCUS projects 5 Pro(照片景深处理软件)官方正式版V5.34.03722 | 景深合成软件下载
- error RC1015: cannot open include file 'sal.h'.
- matplotlib学习—画等高线图
- matlab中kmeans聚类算法
- vue + 百度地图 +点位标注
- 喜讯|山东百华鞋业上沂南新闻了!
- 7位格雷码计算风向_基于单片机的风速风向检测系统设计
- 读 富爸爸财务自由之路 之感
- java中的整型常量,在Java中,整型常量不可以是?
- python-asyncio异步基础
- java拒绝访问_java.io.FileNotFoundException: D:\xxx\yyy (拒绝访问。)问题