算法1-KNN算法及其matlab实现是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
一、算法概述
1、kNN算法又称为k近邻分类(k-nearest neighbor classification)算法。kNN算法则是从训练集中找到和新数据最接近的k条记录,然后根据他们的主要分类来决定新数据的类别。该算法涉及3个主要因素:训练集、距离或相似的衡量、k的大小。
计算步骤如下:
1)算距离:给定测试对象,计算它与训练集中的每个对象的距离
2)找邻居:圈定距离最近的k个训练对象,作为测试对象的近邻
3)做分类:根据这k个近邻归属的主要类别,来对测试对象分类
2、距离或相似度的衡量
什么是合适的距离衡量?距离越近应该意味着这两个点属于一个分类的可能性越大。距离衡量包括欧式距离、夹角余弦等。
3、类别的判定
投票决定:少数服从多数,近邻中哪个类别的点最多就分为该类。
加权投票法:根据距离的远近,对近邻的投票进行加权,距离越近则权重越大(权重为距离平方的倒数)
clear;
clc;
K=3;
trainData = [1.0,2.0;
1.2,0.1;
0.1,1.4;
0.3,3.5];
trainClass = [1,1,2,2];
testData = [0.5,2.3];
[N,M]=size(trainData);
%计算训练数据集与测试数据之间的欧氏距离dist
dist=zeros(N,1);
for i=1:N
dist(i,:)=norm(trainData(i,:)-testData);
end
%将dist从小到大进行排序
[Y,I]=sort(dist,1);
%将训练数据对应的类别与训练数据排序结果对应
trainClass=trainClass(I);
%确定前K个点所在类别的出现频率
classNum=length(unique(trainClass));%取集合中的单值元素的个数
labels=zeros(1,classNum);
for i=1:K
j=trainClass(i);
labels(j)=labels(j)+1;
end
%返回前K个点中出现频率最高的类别作为测试数据的预测分类
[~,idx]=max(labels);
fprintf('该测试数据属于类 %d\n',idx);
%% f方法二更简单
labels=trainClass;
idx=mode(labels(1:K));%mode函数求众数
fprintf('该测试数据属于类 %d ',idx);
看完上述内容,你们掌握算法1-KNN算法及其matlab实现是怎样的的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。