文档详情

天气决策树ID3.doc

发布:2017-03-23约4.69千字共9页下载文档
文本预览下载声明
一、上机目的及内容 1.上机内 根据下列给定的14个样本数据,运用ID3算法构造一个是否适宜打网球的天气决策树。 例子编号 属 性 分类 天况 温度 湿度 风况 1 晴 热 大 无 N 2 晴 热 大 有 N 3 多云 热 大 无 P 4 雨 中 大 无 P 5 雨 冷 正常 无 P 6 雨 冷 正常 有 N 7 多云 冷 正常 有 P 8 晴 中 大 无 N 9 晴 冷 正常 无 P 10 雨 中 正常 无 P 11 晴 中 正常 有 P 12 多云 中 大 有 P 13 多云 热 正常 无 P 14 雨 中 大 有 N 1、决策树通过把实例从根节点排列到某个叶子节点来分类实例,叶子节点即为实例所属的分类。树上的每一个节点说明了对实例的某个属性的测试,并且该节点的每一个后继分支对应于该属性的一个可能值#include stdio.h #include math.h int trnum; struct tr { int key,childs,father,kind; int child[4]; }tree[100]; int n=14,c[100][5],keykind[10][2],keykind_num; int p,q; int captionnum=4; float mc; int outtree[5]; int caption[10]={3,3,2,2}; char caption_name[5][10]={天况,温度,湿度,风况,分类}; char key_name[5][3][10]={{晴,多云,雨},{热,中,冷},{大,正常},{无,有},{-,+}}; void initdata()//初始化数据 c[0][0]=1: 表示第一个实例的天况为晴 { c[0][0]=1;c[0][1]=1;c[0][2]=1;c[0][3]=1;c[0][4]=1; c[1][0]=1;c[1][1]=1;c[1][2]=1;c[1][3]=2;c[1][4]=1; c[2][0]=2;c[2][1]=1;c[2][2]=1;c[2][3]=1;c[2][4]=2; c[3][0]=3;c[3][1]=2;c[3][2]=1;c[3][3]=1;c[3][4]=2; c[4][0]=3;c[4][1]=3;c[4][2]=2;c[4][3]=1;c[4][4]=2; c[5][0]=3;c[5][1]=3;c[5][2]=2;c[5][3]=2;c[5][4]=1; c[6][0]=2;c[6][1]=3;c[6][2]=2;c[6][3]=2;c[6][4]=2; c[7][0]=1;c[7][1]=2;c[7][2]=1;c[7][3]=1;c[7][4]=1; c[8][0]=1;c[8][1]=3;c[8][2]=2;c[8][3]=1;c[8][4]=2; c[9][0]=3;c[9][1]=2;c[9][2]=2;c[9][3]=1;c[9][4]=2; c[10][0]=1;c[10][1]=2;c[10][2]=2;c[10][3]=2;c[10][4]=2; c[11][0]=2;c[11][1]=2;c[11][2]=1;c[11][3]=2;c[11][4]=2; c[12][0]=2;c[12][1]=1;c[12][2]=2;c[12][3]=1;c[12][4]=2; c[13][0]=3;c[13][1]=2;c[13][2]=1;c[13][3]=2;c[13][4]=1; tree[0].father=-1; } void calculate_pq()//计算在当前条件限制下,p=正例多少个,q=反例多少个, { int u,k,i; p=0;q=0; for (i=0;in;i++) { u=1; for (k=1;k=keykind_num;k++) if (c[i][keykind[k][0]]!=keykind[k][1]) { u=0; break; } if (u) if (c[i][4]==1) q++;else p++; } } void calculate_keykind(int x)//找出从当前节点出发,所有父节点的属性 { int i; i=x;keykind_num=0; while (tree[i].father=0) { keykind_num++; keykind[keykind_num][0
显示全部
相似文档