KNN(K-Nearest Neighbor)算法Matlab实现
来源:互联网 发布:淘宝买东西受骗怎么办 编辑:程序博客网 时间:2024/05/16 00:57
KNN(K-Nearest Neighbor)算法即K最邻近算法,是实现分类器中比较简单易懂的一种分类算法。K临近之所以简单是因为它比较符合人们直观感受,即人们在观察事物,对事物进行分类的时候,人们最容易想到的就是谁离那一类最近谁就属于哪一类,即俗话常说的“近朱者赤,近墨者黑”,人们自然而然地把这种观察方式延伸到数据分类处理领域。K-NN算法就是基于欧几里得距离推断事物类别的一种实现方法。
KNN算法中K指的是寻找距离测试样本最近的训练集元素个数。
一、KNN算法描述如下:
1、初始化训练集和类别;
2、计算测试集样本与训练集样本的欧氏距离;
3、根据欧氏距离大小对训练集样本进行升序排序;
4、选取欧式距离最小的前K个训练样本,统计其在各类别中的频率;
5、返回频率最大的类别,即测试集样本属于该类别。
二、Matlab代码实现
在理解了算法步骤之后,就能很容易地实现算法,Matlab作为一种研究数据的优秀工具,是实现和理解这个算法不错的选择。
%实现KNN算法%%算法描述%1、初始化训练集和类别;%2、计算测试集样本与训练集样本的欧氏距离;%3、根据欧氏距离大小对训练集样本进行升序排序;%4、选取欧式距离最小的前K个训练样本,统计其在各类别中的频率;%5、返回频率最大的类别,即测试集样本属于该类别。close all;clc;%%算法实现%step1、初始化训练集、测试集、K值%创建一个三维矩阵,二维表示同一类下的二维坐标点,第三维表示类别trainData1=[0 0;0.1 0.3;0.2 0.1;0.2 0.2];%第一类训练数据trainData2=[1 0;1.1 0.3;1.2 0.1;1.2 0.2];%第二类训练数据trainData3=[0 1;0.1 1.3;0.2 1.1;0.2 1.2];%第三类训练数据trainData(:,:,1)=trainData1;%设置第一类测试数据trainData(:,:,2)=trainData2;%设置第二类测试数据trainData(:,:,3)=trainData3;%设置第三类测试数据trainDim=size(trainData);%获取训练集的维数testData=[1.6 0.3];%设置1个测试点K=7;%%分别计算测试集中各个点与每个训练集中的点的欧氏距离%把测试点扩展成矩阵testData_rep=repmat(testData,4,1);%设置三个二维矩阵存放测试集与测试点的扩展矩阵的差值平方%diff1=zero(trainDim(1),trianDim(2));%diff2=zero(trainDim(1),trianDim(2));%diff3=zero(trainDim(1),trianDim(2));for i=1:trainDim(3) diff1=(trainData(:,:,1)-testData_rep).^2; diff2=(trainData(:,:,2)-testData_rep).^2; diff3=(trainData(:,:,3)-testData_rep).^2;end%设置三个一维数组存放欧式距离distance1=(diff1(:,1)+diff1(:,2)).^0.5;distance2=(diff2(:,1)+diff2(:,2)).^0.5;distance3=(diff3(:,1)+diff3(:,2)).^0.5;%将三个一维数组合成一个二维矩阵temp=[distance1 distance2 distance3];%将这个二维矩阵转换为一维数组distance=reshape(temp,1,3*4);%对距离进行排序distance_sort=sort(distance);%用一个循环寻找最小的K个距离里面那个类里出现的频率最高,并返回该类num1=0;%第一类出现的次数num2=0;%第二类出现的次数num3=0;%第三类出现的次数sum=0;%sum1,sum2,sum3的和for i=1:K for j=1:4 if distance1(j)==distance_sort(i) num1=num1+1; end if distance2(j)==distance_sort(i) num2=num2+1; end if distance3(j)==distance_sort(i) num3=num3+1; end end sum=num1+num2+num3; if sum>=K break; endendclass=[num1 num2 num3];classname=find(class(1,:)==max(class));fprintf('测试点(%f %f)属于第%d类',testData(1),testData(2),classname);%%使用绘图将训练集点和测试集点绘画出来figure(1);hold on;for i=1:4 plot(trainData1(i,1),trainData1(i,2),'*'); plot(trainData2(i,1),trainData2(i,2),'o'); plot(trainData3(i,1),trainData3(i,2),'>');endplot(testData(1),testData(2),'x');text(0.1,0.1,'第一类');text(1.1,0.1,'第二类');text(0.1,1,'第三类');
对于测试点testData=[1.6 0.3],测试结果如下:
图中,星形表示第一类训练样本点,圈儿代表第二类训练样本点,三角形代表第三类训练样本点,x代表测试样本点;
测试点(1.600000 0.300000)属于第2类>>
将测试点改为:testData=[0.1 0.4],运行结果如下:
测试点(0.100000 0.400000)属于第1类>>
将测试点改为:testData=[0.3 1.2],测试结果如下:
测试点(0.300000 1.200000)属于第3类>>
经过测试,可以看出KNN能够很好的实现样本分类功能,并且理解简单容易,对于初学分类器的开发者而言,KNN是一个很好的选择!
- KNN(K-Nearest Neighbor)算法Matlab实现
- KNN(K Nearest Neighbor)算法的MatLab实现
- k-近邻算法(k-Nearest Neighbor, kNN)
- k-近邻算法(k-Nearest Neighbor,KNN)
- KNN(k-nearest neighbor algorithm)算法
- KNN(K nearest neighbor)算法
- KNN(K-Nearest Neighbor)分类算法原理
- kNN(K-Nearest Neighbor)算法简介
- Python实现kNN(k nearest neighbor algorithm)
- K最近邻结点算法(k-Nearest Neighbor algorithm)KNN——python简单实现
- chapter2 机器学习之KNN(k-nearest neighbor algorithm)--K近邻算法从原理到实现
- K最邻近算法(K-Nearest Neighbor,KNN)(初探)
- K近邻k-Nearest Neighbor(KNN)算法的理解
- python-手写knn(k Nearest Neighbor) k近邻算法
- K近邻k-Nearest Neighbor(KNN)算法
- KNN(K-nearest neighbor algorithm)K近邻算法
- KNN(K-Nearest Neighbor)
- KNN(K-nearest neighbor)理解
- 在Android Studio中进行单元测试和UI测试
- $.parser.setParserOptions()的实现
- 深度增强学习:走向通用人工智能之路
- 1、uboot的目录分析
- 从GitHub上下载单个文件
- KNN(K-Nearest Neighbor)算法Matlab实现
- ord()和chr()对中文字符的应用
- 如何准备BAT技术面试答案(中)——Java研发方向
- Mac安装wget(亲测可行)
- jQuery事件对象的使用
- C++抽象编程——递归策略——前言
- java.lang.IllegalArgumentException: No config chosen
- SPOJ 19996 MOON1
- 软件工程的实践项目课程的自我目标