机器学习决策树ID3算法的源代码

上传人:cn****1 文档编号:488230033 上传时间:2022-11-25 格式:DOC 页数:14 大小:103KB
返回 下载 相关 举报
机器学习决策树ID3算法的源代码_第1页
第1页 / 共14页
机器学习决策树ID3算法的源代码_第2页
第2页 / 共14页
机器学习决策树ID3算法的源代码_第3页
第3页 / 共14页
机器学习决策树ID3算法的源代码_第4页
第4页 / 共14页
机器学习决策树ID3算法的源代码_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《机器学习决策树ID3算法的源代码》由会员分享,可在线阅读,更多相关《机器学习决策树ID3算法的源代码(14页珍藏版)》请在金锄头文库上搜索。

1、机器学习决策树 ID3 算法的源代码上( VC6.0 测试通过)发布: 2009-4-16 11:42 |作者: 天涯 | 来源 : 资讯i=s 本帖最后由 天涯 于 2009-4-17 13:03编辑这个的重要,不用多说了吧,有什么意见和建议跟帖留言啊,哈,觉得好,请顶一个 第一部分:#include#include#include#include#include#include#define N 500 /N定义为给定训练数据的估计个数#define M 6 /M定义为候选属性的个数#define c 2 / 定义 c=2 个不同类#define s_max 5 /定义 s_max 为每个

2、候选属性所划分的含有最大的子集数int avM=3,3,2,3,4,2;int sNM+2,aNM+2; / 数组 sj 用来记录第 i 个训练样本的第 j 个属性值int path_aNM+1,path_bNM+1; / 用 path_aNM+1,path_bNM+1 记录每一片叶子的路径 int count_list=M; /count_list 用于记录候选属性个数int count=-1; / 用 count+1 记录训练样本数int attribute_test_list1M;int leaves=1;/ 用数组 sskj 表示第 k 个候选属性划分的子集 Sj 中类 Ci 的样本数

3、,数组的具体大小可根据给定训练数据调整 int ssMcs_max;/ 第 k 个候选属性划分的子集 Sj 中样本属于类 Ci 的概率double pMcs_max;/count_sj 用来记录第 i 个候选属性的第 j 个子集中样本个数int count_sMs_max;/ 分别定义 EM ,GainM 表示熵和熵的期望压缩double EM;double GainM;/ 变量 max_Gain 用来存储最大的信息增益double max_Gain;int Trip=-1; / 用 Trip 记录每一个叶子递归次数int most;void main(void)int i,j=-1,k,te

4、mp,l,count_test,true_class=0,count_train;char trainname256,testname256;int testN8;couttrainname;ifstream trainfile;trainfile.open(trainname,ios:in|ios:nocreate);if(!trainfile)cout 无法使用训练集,请重试 !temp)j=j+1;k=j%(M+2);if(k=0|j=0) count+=1;/count 为训练集的第几个 ,k 代表室第几个属性switch(k)case 0:scount0=temp;break;cas

5、e 1:scount1=temp;break;case 2:scount2=temp;break;case 3:scount3=temp;break;case 4:scount4=temp;break;case 5:scount5=temp;break;case 6:scount6=temp;break;case 7:scount7=temp;break;trainfile.close();/ 输出训练集for(i=0;i=count;i+)if(i%2=0) coutn;for(j=0;jM+2;j+)coutsetw(4)sj;/most 记录训练集中哪类样本数比较多,以用于确定递归终止时

6、不确定的类别 for(i=0,j=0,k=0;ik) most=0;else most=1;/count_train 记录训练集的样本数count_train=count+1;/ 训练的属性for(i=0;iM;i+)attribute_test_list1=i+1;/ 首次调用递归函数,即是生成根结点的分支Generate_decision_tree(s,count+1,attribute_test_list1,count_list,0,0);coutn 叶子结点的个数为 :leavesn;couttestname;ifstream testfile;testfile.open(testna

7、me,ios:in|ios:nocreate);if(!testfile)cout 无法使用训练集,请重试 !temp)j=j+1;k=j%(M+2);if(k=0) count_test+=1;switch(k)case 0:testcount_test7=temp;break;case 1:testcount_test1=temp;break;case 2:testcount_test2=temp;break;case 3:testcount_test3=temp;break;case 4:testcount_test4=temp;break;case 5:testcount_test5=

8、temp;break;case 6:testcount_test6=temp;break;testfile.close();for(i=1;i=count_test;i+)test0=0; / 以确保评估分类准确率coutcount_test=count_testn:coutcount_train=count_trainn;/用测试集来评估分类准确率for(i=1;i=count_test;i+)1=0;for(j=1;j=leaves;j+)if(testpath_bj1=path_aj1&testpath_bj2=path_aj2&testpath_bj3=path_aj3&testpat

9、h_bj4=path_aj4&testpath_bj5=path_aj5&testpath _bj6=path_aj6)1=1;if(test7=path_aj0) true_class+=1;break;if(test7=most & l=0) true_class+=1;cout测试集与训练集的比例为:float(count_train)/count_testn;cout分类准确率为:float(true_class)/count_testn;第二部分:void Generate_decision_tree(int bM+2,int bn,int attribute_test_list,i

10、nt sn,int ai,int aj)/定义数组a记录目前待分的训练样本集,定义数组b记录目前要分结点中所含的训练样本集/same_class 用来记数,判别 samples 是否都属于同一个类Trip+=1;/ 用 Trip 记录每一个叶子递归次数path_aleavesTrip=ai;/用 path_aNM+1,path_bNM+1记录每一片叶子的路径path_bleavesTrip=aj;int same_class,i,j,k,l,ll,lll;if(bn=0)/ 待分结点的样本集为空时,加上一个树叶,标记为训练集中最普通的类/ 记录路径与前一路径相同的部分for(i=1;iTrip

11、;i+)if(path_aleavesi=0)path_aleavesi=path_aleaves-1i;path_bleavesi=path_bleaves-1i;coutnIF ;for(i=1;i=Trip;i+)if(i=1) coutapath_bleavesi=path_aleavesi;else coutvvAavvpath_bleavesivv二vvpath_aleavesi;cout THEN class=1;i-)if(path_aleavesi=avpath_bleavesi-1) Trip-=1;elsebreak;Trip-=1;leaves+=1;elsesame_

12、class=1;for(i=0;ibn-1;i+)if(bi0=bi+10)same_class+=1;if(same_class=bn)/ 待分样本集属于同一类时以该类标记/ 记录路径与前一路径相同的部分for(i=1;iTrip;i+)if(path_aleavesi=0)path_aleavesi=path_aleaves-1i;path_bleavesi=path_bleaves-1i;coutnIF ;for(i=1;i=Trip;i+)if(i=1)coutapath_bleavesi=path_aleavesi;elsecoutvvAavvpath_bleavesivv二vvpath_aleavesi;cout THEN class=b00;path_aleaves0=b00;/ 修改树的深

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号