没有合适的资源?快使用搜索试试~ 我知道了~
机器学习决策树-ID3算法的源代码.pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 132 浏览量
2022-11-24
13:54:34
上传
评论
收藏 236KB PDF 举报
温馨提示
试读
12页
。。。
资源推荐
资源详情
资源评论
机器学习决策树 ID3算法的源代码(VC6.0)
#include<iostream.h>
#include<fstream.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<iomanip.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<<"
请输入训练集文件名
:";
cin>>trainname;
ifstream trainfile;
trainfile.open(trainname,ios::in|ios::nocreate);
if(!trainfile){
cout<<"
无法使用训练集,请重试
!"<<'\n';
exit(1);
}
//
读取训练集
while(trainfile>>temp){
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;j<M+2;j++)
cout<<setw(4)<<s[j];
}
//most
记录训练集中哪类样本数比较多,以用于确定递归终止时不确定的类别
for(i=0,j=0,k=0;i<=count;i++){
if(s[0]==0) j+=1;
else k+=1;
}
if(j>k) most=0;
else most=1;
//count_train
记录训练集的样本数
count_train=count+1;
//
训练的属性
for(i=0;i<M;i++)
attribute_test_list1=i+1;
//
首次调用递归函数,即是生成根结点的分支
Generate_decision_tree(s,count+1,attribute_test_list1,count_list,0,0);
剩余11页未读,继续阅读
资源评论
不吃鸳鸯锅
- 粉丝: 8292
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功