KNN算法及思想,代码

KNN
KNN原理:
K最近邻(KNN)算法核心思想是如果一个样本在特征空间中的k个最临近的样本中的大多数属于某一个类别,则该样本也属于这个类别。K通常是不大于20的整数。
最重要的三点就是:k值的选取,距离度量的方式和分类决策规则。
规则:分类决策规则一般使用多数表决法。即如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别
过程:
输入训练集数据和标签,输入测试数据;
计算测试数据与各个训练数据之间的距离;
按照距离的递增关系进行排序,选取距离最小的K个点;
确定前K个点所在类别的出现频率,返回前K个点中出现频率最高的类别作为测试数据的预测分类。

算法步骤:
1初始化距离为最大值
2计算未知样本和每个训练样本的距离dist
3得到目前K个最近邻样本中最大距离maxdist
4如果dist小于maxdist,则将该训练样本作为K-最近邻样本
5重复步骤2,3,4,直到未知样本和所有训练样本的距离都算完
6统计K个最近邻样本中每个类别出现的次数
7选择出现频率最大的类别作为未知样本的类别;

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#define K 3 //近邻数k
typedef float type;
//动态创建二维数组
type **createarray(int n,int m)
{
int i;
type **array;
array=(type **)malloc(n*sizeof(type ));
array[0]=(type )malloc(nm
sizeof(type));
for(i=1;i<n;i++) array[i]=array[i-1]+m;
return array;
}
//读取文本中数据,要求首行格式为 N=数据量,D=维数
void loaddata(int *n,int *d,type ***array,type ***karray)
{
int i,j;
FILE *fp;
if((fp=fopen(“C:\Users\杨素素\Desktop\data.txt”,“r”))NULL)
fprintf(st

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值