首页 模式识别c语言isodata算法

模式识别c语言isodata算法

举报
开通vip

模式识别c语言isodata算法模式识别c语言isodata算法 ... c语言编写的ISODATA程序 #include #include #include #include #include #include #define MAXNUM 100 //最大模式个数 #define MAXDIM 10 //最大模式维数 #define K 0.5 //分裂时使用的比值 #define MAXDOUBLE 1.0e20 //最大双精度值 #define N 10 //实际模式个数 #define DIM 2 //实际模式维数 s...

模式识别c语言isodata算法
模式识别c语言isodata算法 ... c语言编写的ISODATA程序 #include #include #include #include #include #include #define MAXNUM 100 //最大模式个数 #define MAXDIM 10 //最大模式维数 #define K 0.5 //分裂时使用的比值 #define MAXDOUBLE 1.0e20 //最大双精度值 #define N 10 //实际模式个数 #define DIM 2 //实际模式维数 struct Pattern //模式结构体 { int n; //模式序号 float s[MAXDIM]; //模式数据 }; struct Cluster //类结构体 { struct Pattern z; //类中心 int n; //类中包含的模式数目 float avg_d; //模式到类心的平均距离 struct Pattern y[MAXNUM]; //模式 float sigma[MAXDIM]; //分量的 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 差 int max; //用于 记录 混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载 类内距离标准差矢量最大的分量下标 float sigma_max; //类内分量距离标准差最大值 }; struct Pattern InitPattern(int i,float a,float b) //对样本模式进行初 始化 { struct Pattern temp; temp.n=i; temp.s[0]=a; temp.s[1]=b; return temp; } 页脚. ... //以下为各参数声明 int c=3; //预期的类数 int Nc=1; //初始聚类中心个数 int ON=1; //每一类中允许的最少模式数(小于此数不可单独成类) float OS=1; //类内分量分布的标准差上限(大于此数就分裂) float OC=4; //两类中心间的最小距离下限(小于此数两类合并) int L=1; //在每次迭代中可以合并的类的最大对数 int I=8; //最多迭代次数 struct Pattern x[N]; //全部模式 struct Cluster w[N]; //全部类 float D[MAXNUM][MAXNUM]; //各类对中心间的距离 float dis; //总体平均距离 int iter=1; //记录迭代次数 i,j; //循环变量 int //以下为程序用到的调用函数 void Init(); void ISODATA(); void InitCenter(); void Clustering(); float Distance(struct Pattern x1,struct Pattern x2); struct Cluster Insert(struct Pattern a,struct Cluster b); int CheckAndUnion(); void CalParameter(); struct Pattern CalCenter(struct Cluster a); float Cal_D(int i); void CalSigma(); int divide(); void CalCenterDis(); int UnionByOC(); void Union(int a,int b); void PrintCluster(); void main() { Init(); printf("\n****************** ISODATA 算法程序 页脚. ... **************************\n"); printf("本实验使用样本集如下:\n"); x[0]=InitPattern(0,0,0); x[1]=InitPattern(1,3,8); x[2]=InitPattern(2,2,2); x[3]=InitPattern(3,1,1); x[4]=InitPattern(4,5,3); x[5]=InitPattern(5,4,8); x[6]=InitPattern(6,6,3); x[7]=InitPattern(7,5,4); x[8]=InitPattern(8,6,4); x[9]=InitPattern(9,7,5); for(i=0;itemp) { min=temp; l=j; } } w[l]=Insert(x[i],w[l]); } } float Distance(struct Pattern x1,struct Pattern x2) //计算两个 模式距离的函数 { int i; float temp=0.0; for(i=0;idis)&&(w[j].n>2*(ON+1))||(Nc<=c/2)) { i=w[j].max; for(l=Nc;l>j;l--) w[l].z=w[l-1].z; w[j+1].z.s[i]-=K*sigma_temp; w[j].z.s[i]+=K*sigma_temp; Nc++; return 1; } } return 0; } void CalCenterDis() // 计算各类对中心间的距离 { int i,j; for(i=0;ik;l--) Dmin[l]=Dmin[l-1]; Dmin[k].d=D[i][j]; Dmin[k].i=i; Dmin[k].j=j; break; } for(i=0;i-1&&Dmin[i].j>-1) { Union(Dmin[i].i,Dmin[i].j); flag=1; } for(j=0;j=2*c)||iter%2==0) goto step8; step6: CalSigma(); 页脚. ... step7: if(divide()) { iter++; goto step2; } step8: CalCenterDis(); step9: if(UnionByOC()) changed=1; step10: if(iter>=I) //判断循环还是退出 { printf("---------------经过 %d 次迭代,达到迭代次数 --------------\n",iter); return; } else { if(changed==1) { char ch; iter++; printf("本次迭代完成,是否需要改变参数(Y/N),,:"); while(!isspace(ch=getchar())); if(ch=='y'||ch=='Y') goto start; else goto step2; } else { iter++; goto step2; } } } 页脚.
本文档为【模式识别c语言isodata算法】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_995397
暂无简介~
格式:doc
大小:39KB
软件:Word
页数:20
分类:其他高等教育
上传时间:2018-04-28
浏览量:33