- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
机器学习决策树 ID3算法的源代码上(VC6.0测试通过)
#includeiostream.h#includefstream.h#includestring.h#includestdlib.h#includemath.h#includeiomanip.h#define N 500??//N定义为给定训练数据的估计个数#define M 6??//M定义为候选属性的个数#define c 2??//定义c=2个不同类#define s_max??5 //定义s_max为每个候选属性所划分的含有最大的子集数int av[M]={3,3,2,3,4,2};int s[N][M+2],a[N][M+2];??//数组s[j]用来记录第i个训练样本的第j个属性值int path_a[N][M+1],path_b[N][M+1];??//用path_a[N][M+1],path_b[N][M+1]记录每一片叶子的路径int count_list=M;??//count_list用于记录候选属性个数int count=-1;? ?//用count+1记录训练样本数int attribute_test_list1[M];int leaves=1;//用数组ss[k][j]表示第k个候选属性划分的子集Sj中类Ci的样本数,数组的具体大小可根据给定训练数据调整int ss[M][c][s_max];??//第k个候选属性划分的子集Sj中样本属于类Ci的概率double p[M][c][s_max];//count_s[j]用来记录第i个候选属性的第j个子集中样本个数int count_s[M][s_max];//分别定义E[M],Gain[M]表示熵和熵的期望压缩double E[M];double Gain[M];//变量max_Gain用来存储最大的信息增益double max_Gain;int Trip=-1;??//用Trip记录每一个叶子递归次数int most;void main(void){? ? int i,j=-1,k,temp,l,count_test,true_class=0,count_train;? ? char trainname[256],testname[256];? ? int test[N][8];? ? cout请输入训练集文件名:;? ? cintrainname;? ? ifstream trainfile;? ? trainfile.open(trainname,ios::in|ios::nocreate);? ? if(!trainfile){? ?? ???cout无法使用训练集,请重试!\n;? ?? ???exit(1);? ? }? ? //读取训练集? ? while(trainfiletemp){? ?? ? j=j+1;? ?? ? k=j%(M+2);? ?? ? if(k==0||j==0) count+=1;? ?? ? //count为训练集的第几个,k代表室第几个属性? ?? ? switch(k){? ?? ? case 0:s[count][0]=temp;? ?? ?? ?? ???break;? ?? ? case 1:s[count][1]=temp;? ?? ?? ?? ???break;? ?? ? case 2:s[count][2]=temp;? ?? ?? ?? ???break;? ?? ? case 3:s[count][3]=temp;? ?? ?? ?? ???break;? ?? ? case 4:s[count][4]=temp;? ?? ?? ?? ???break;? ?? ? case 5:s[count][5]=temp;? ?? ?? ?? ???break;? ?? ? case 6:s[count][6]=temp;? ?? ?? ?? ???break;? ?? ? case 7:s[count][7]=temp;? ?? ?? ?? ???break;? ?? ? }? ?? ? ? ? }? ? trainfile.close();? ? //输出训练集? ? for(i=0;i=count;i++){? ?? ???if(i%2==0) cout\n;? ?? ???for(j=0;jM+2;j++)? ?? ?? ?? ?coutsetw(4)s[j];? ? }? ? //most记录训练集中哪类样本数比较多,以用于确定递归终止时不确定的类别? ? for(
文档评论(0)