KNN算法
2022/5/6 9:12:44
本文主要是介绍KNN算法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
#include<cstdio> struct node { int id; double tall,dif;//身高和相异度 int type;//类型 假定矮个为0,中等为1,高个为2 }a[105],e[105]; int cnt[10],maxcnt,typ=-1; int n,k; double tabs(double x) { return x<0?-x:x; } void sort(int x)//每次对邻居集合排序,使得相异度最大的数据在栈顶 { for(int i=x;i>1;i--) { if(e[i].dif<e[i-1].dif) { node t=e[i]; e[i]=e[i-1]; e[i-1]=t; } else break; } return; } int main() { scanf("%d%d",&n,&k); scanf("%lf",&a[0].tall);//输入待分类的数据 for(int i=1;i<=n;i++)//输入已有的数据并计算相异度 { scanf("%lf %d",&a[i].tall,&a[i].type); a[i].id=i; a[i].dif=tabs(a[i].tall-a[0].tall); } for(int i=1;i<=k;i++)//形成初始邻居集合 { e[i]=a[i]; sort(i); } for(int i=k+1;i<=n;i++) { if(a[i].dif<e[k].dif)//新数据相异度更小,加入邻居集合并重新排序 { e[k]=a[i]; sort(k); } } for(int i=1;i<=k;i++) { printf("%d %.2lf %.2lf %d\n",e[i].id,e[i].tall,e[i].dif,e[i].type);//输出最终邻居集合内的数据 cnt[e[i].type]++; if(cnt[e[i].type]>maxcnt)//统计各个类型的数量 { maxcnt=cnt[e[i].type]; typ=e[i].type; } } printf("%d",typ);//输出最终的分类 return 0; } /* 样例数据: 15 5 1.62 1.60 0 2.00 2 1.90 1 1.88 1 1.70 0 1.85 1 1.59 0 1.70 0 2.20 2 2.10 2 1.80 1 1.95 1 1.90 1 1.80 1 1.75 1 */
这篇关于KNN算法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)