【原创】Liu_LongPo 转载请注明出处 
【CSDN】http://blog.csdn.net/llp1992

参考https://blog.csdn.net/llp1992/article/details/45040685

KNN 算法其实简单的说就是“物以类聚”,也就是将新的没有被分类的点分类为周围的点中大多数属于的类。它采用测量不同特征值之间的距离方法进行分类,思想很简单:如果一个样本的特征空间中最为临近(欧式距离进行判断)的K个点大都属于某一个类,那么该样本就属于这个类。这就是物以类聚的思想。

当然,实际中,不同的K取值会影响到分类效果,并且在K个临近点的选择中,都不加意外的认为这K个点都是已经分类好的了,否则该算法也就失去了物以类聚的意义了。

KNN算法的不足点:

1、当样本不平衡时,比如一个类的样本容量很大,其他类的样本容量很小,输入一个样本的时候,K个临近值中大多数都是大样本容量的那个类,这时可能就会导致分类错误。改进方法是对K临近点进行加权,也就是距离近的点的权值大,距离远的点权值小。 
2、计算量较大,每个待分类的样本都要计算它到全部点的距离,根据距离排序才能求得K个临近点,改进方法是:先对已知样本点进行剪辑,事先去除对分类作用不大的样本。

适用性:

适用于样本容量比较大的类域的自动分类,而样本容量较小的类域则容易误分

算法描述:

    1、计算已知类别数据集合汇总的点与当前点的距离2、按照距离递增次序排序3、选取与当前点距离最近的K个点4、确定距离最近的前K个点所在类别的出现频率5、返回距离最近的前K个点中频率最高的类别作为当前点的预测分类

Matlab 实现

这里以一个完整实例呈现,代码如下:

function relustLabel = KNN(inx,data,labels,k)
%%
%   inx 为 输入测试数据,data为样本数据,labels为样本标签
%%[datarow , datacol] = size(data);
diffMat = repmat(inx,[datarow,1]) - data ;
distanceMat = sqrt(sum(diffMat.^2,2));
[B , IX] = sort(distanceMat,'ascend');
len = min(k,length(B));
relustLabel = mode(labels(IX(1:len)));end

实际调用中,我们利用一个数据集进行测试,该数据集是由1000个样本的3维坐标组成,共分为3个类

首先可视化我们的数据集,看看它的分布:

第一维和第二维:可以清晰地看到数据大致上分为 3 类

第1维和第3维:从这个角度看,3类的分布就有点重叠了,这是因为我们的视角原因

画出3维,看看它的庐山真面目:

由于我们已经编写了KNN代码,接下来我们只需调用就行。了解过机器学习的人都应该知道,很多样本数据在代入算法之前都应该进行归一化,这里我们将数据归一化在[0,1]的区间内,归一化方式如下:

newData = (oldData-minValue)/(maxValue-minValue)

其中,maxValue为oldData的最大值,minValue为 oldData 的最小值。

同时,我们对于1000个数据集,采取10%的数据进行测试,90%的数据进行训练的方式,由于本测试数据之间完全独立,可以随机抽取10%的数据作为测试数据,代码如下:

function KNNdatgingTest
%%
clc
clear
close all
%%
data = load('datingTestSet2.txt');
dataMat = data(:,1:3);
labels = data(:,4);
len = size(dataMat,1);
k = 4;
error = 0;
% 测试数据比例
Ratio = 0.1;
numTest = Ratio * len;
% 归一化处理
maxV = max(dataMat);
minV = min(dataMat);
range = maxV-minV;
newdataMat = (dataMat-repmat(minV,[len,1]))./(repmat(range,[len,1]));% 测试
for i = 1:numTestclassifyresult = KNN(newdataMat(i,:),newdataMat(numTest:len,:),labels(numTest:len,:),k);fprintf('测试结果为:%d  真实结果为:%d\n',[classifyresult labels(i)])if(classifyresult~=labels(i))error = error+1;end
endfprintf('准确率为:%f\n',1-error/(numTest))
end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

当我们选择K为4的时候,准确率为:97%

K近邻的MATLAB实现相关推荐

  1. k近邻算法matlab实现_k近邻算法

    k 近邻法 (k-NN) 是一种基于实例的学习方法,无法转化为对参数空间的搜索问题(参数最优化 问题).它的特点是对特征空间进行搜索.除了k近邻法,本章还对以下几个问题进行较深入的讨 论: 切比雪夫距 ...

  2. knn(k近邻算法)——matlab

    目录 1. 基本定义 2. 算法原理 2.1 算法优缺点 2.2 算法参数 2.3 变种 3.算法中的距离公式 4.案例实现 4.1 读取数据 4.2 分离训练集和测试集 4.3 归一化处理 4.4  ...

  3. 【MATLAB】Parzen窗与K近邻算法原理与代码详解

    文章目录 1.非参数估计原理 2.Parzen窗 2.1.算法原理 2.2.Matlab实现与参数探究 3.K近邻 3.1.算法原理 3.2.Matlab实现与参数探究 1.非参数估计原理 \qqua ...

  4. 数据处理 | MATLAB实现KNN(K近邻)缺失数据填补

    数据处理 | MATLAB实现KNN(K近邻)缺失数据填补 目录 数据处理 | MATLAB实现KNN(K近邻)缺失数据填补 基本介绍 插补描述 程序设计 参考资料 基本介绍 用于缺失值插补的单变量方 ...

  5. MATLAB实现k近邻学习(Iris数据集)

    MATLAB实现kNN分类 简介 Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集.数据集包含150个数据样本,分为3类,每类50个数据,每个数据包含4个属性.可通过花萼长度,花萼宽度,花瓣长度 ...

  6. MATLAB计算K近邻

    在实验中经常会需要计算K近邻,为了避免多次重写,这里用MATLAB实现了一个计算K近邻的函数,该函数要求输入两个参数,第一个参数就是数据矩阵,要求每行为一个多维样本点,第二个参数就是K值了.函数返回K ...

  7. matlab knn,MATLAB K近邻算法 — knnsearch() 函数 | 学步园

    K近邻 IDX = knnsearch(X,Y) finds the nearest neighbor in X for each point in Y. X is an MX-by-N matrix ...

  8. 【图像处理】图像噪声去除实验 用 matlab 实现KNN(K近邻平滑滤波器)和 SNN(对称近邻平滑滤波器)

    实验内容 实现KNN(K近邻平滑滤波器) 算法实现为函数[im]=KNN_denoise (I,K,N),其中I为读入的图像矩阵:K为最近邻个数,N为模板大小参数(N*N). 测试代码 im=imre ...

  9. Matlab实现加权K近邻

    加权K近邻是K近邻的一种修正,当理解K近邻之后,加权K近邻则很好理解了,不说了,上代码, function label1=WKNN(training,testing,k) [row, column]= ...

最新文章

  1. 结合项目实例 回顾传统设计模式(九)迭代器模式
  2. vb6.0 mysql ado控件_VB6.0里的ADO控件怎么用?
  3. 对象属性结构赋值_(六)面向对象-下
  4. 从QQ进程内存中搜索出QQ号码
  5. 15分钟内使用Twilio和Stormpath在Spring Boot中进行身份管理
  6. jvm垃圾回收之类加载机制
  7. 准备一些万圣节的乐趣——UI设计素材模板
  8. 困惑我半年的一个问题终于解决了
  9. Linux命令解释之find
  10. 如何 珍惜自己和珍重别人。珍惜一切
  11. Ceph 撸源码系列(二):Ceph源代码里的那些锁 std::mutex(2 of 3)
  12. 图数据库 Titan 快速入门
  13. css单线边框_css border-collapse设置表格单线边框和双线边框
  14. 什么是PLC的响应时间
  15. 应届生面试自我介绍该怎么说?
  16. 智能家居软件测试用例,智能家居助理HomeAssistant的实践和测试
  17. Windows 11 中打印时提示打印机不兼容,都来是“+”惹的祸
  18. Maxcompute Sql性能调优(1)
  19. Linux之NTFS、FAT32、exFAT 各种格式硬盘挂载整理
  20. i5 8250u java_i5 8250U整机综合性能_笔记本评测-中关村在线

热门文章

  1. 这些愚蠢的事 数据中心管理中要避免
  2. 规范化:范式(主属性,非主属性,1NF,2NF,3NF,BCNF:定义,例子等)
  3. 算法笔记.胡凡 第11章 动态规划专题
  4. numpy.arange()参数含义
  5. HALEY KOEHN--a good graphic designer recent years
  6. win10玩武装突袭3一会就闪退的解决方法
  7. python 了解量化交易
  8. 祝愿大家未来顺利平安
  9. 微信公众号与小程序数据互通
  10. 微信自定义分享、二次分享解决方案