k近邻算法c语言,用C语言对K近邻法进行的模式识别

1、K 近邻法 近邻法的基本思想是在测试样本 x 的 k 个近邻中,按出现的样本类别来作为 x 的类别, 即先对 x 的 k 个近邻一一找出它们的类别,然后对 x 类别进行判别,即在 N 个训练样本中, 找出 x 的 k 个近邻。 设 N 个样本中,来自 w1 类的样本有 N1 个,来自 w2 类的样本有 N2 个,.,来自 wc 类的样本有 Nc 个;k1,k2,,kc 是 k 个近邻中分别属于 w1,w2,.,wc 类的样 本数。定义判别函数为:gi(x)=ki,i=1,2,.,c;决策规则为:若 gj(x)=maxki, 则决策 x 属于 wj 类。 输入:A100为 100 个训练样本在空间中的坐标,k=9 为近邻数。 输出:x 所属的类别。 取 A0A9作为 x 的 9 个初始近邻,计算与测试样本 x 间的欧式距离 d(x,Ai), i=0,1,k;按 d(x,Ai)升序排序,计算最远样本与 x 间的距离 Dmaxd(x,Aj) | j=0,1,.k; for(i=k+1;ifabs(x-Aj) t=Ai;Ai=Aj;Aj=t;int compare(float A,float 。

2、B10)int i,j,t=0;for(i=0;i(-50)printf(“%6.2f“,Ai);if(i+1)%10=0)printf(“n“);break;elsecontinue;for (i=1;i(-10)printf(“测试样本 x=%fn“,x);break;elsecontinue;knn(x,A);for(i=k;i=Dj) flag=1;continue;elseflag=0;break;if(flag=1)printf(“x 属于 A%d 类“,(i+1);首先产生 100 个-50 到 50 之间的随机浮点数,将这一百个数按每十个一类分类。然后 产生一个-10 到 50 之间的随机测试样本数。将 AOA8作为测试样本 x 的初始近邻, Knn(x,A)负责将 A0A8依次按与测试样本 x 间的欧式距离按升序排列。将最远样本 与 x 间的距离记为 f=fabs(x-a8) ,然后 i 从 9 开始与 f 循环比较,如果 d=fabs(x-Ai)f, 则与 A8交换,然后调用 Knn 排序,然后依次循环处理。最终得到 A0A8为测试样本 x 的 9 个近邻。而且按欧式距离升序排列。由于使 B100等于了 A100没有改变 A100的 初始排列,然后调用 compare(A,B10),将 100 个数分成的 10 类,依次记数,而且不重 复记数。每类与 9 个近邻数相同的个数存于 Di中,i 从 0 到 9,比较大小。找出最大的那 个数,然后通过(i+1)便能查出测试样本属于哪类。程序结果:输出的 100 个浮点数,将一百个数分成的每十个为一类,分别记为 A1A10 类,同时输出测试样本 x=16.84。找出 x 的 9 个近邻,按欧式距离生序 排列,找出这九个数在这十个类中的分布,进行比较。找出概率最大的即为 x 的类别。如程序结果 x=16.84 被归为 A8 类。。

《用C语言对K近邻法进行的模式识别》由会员jiups****uk12分享,可在线阅读,更多相关《用C语言对K近邻法进行的模式识别》请在金锄头文库上搜索。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值