一、kNN概念描述
请参考:http://www.omegaxyz.com/2018/01/08/knn/
kNN算法又称为k最近邻(k-nearest neighbor classification)分类算法。所谓的k最近邻,就是指最接近的k个邻居(数据),即每个样本都可以由它的K个邻居来表达。
kNN算法的核心思想是,在一个含未知样本的空间,可以根据离这个样本最邻近的k个样本的数据类型来确定样本的数据类型。
该算法涉及3个主要因素:训练集、距离与相似的衡量、k的大小;
主要考虑因素:距离与相似度的;
二、举例说明
右图中,绿色圆要被决定赋予哪个类,是红色三角形还是蓝色四方形?
如果K=3,由于红色三角形所占比例为2/3,绿色圆将被赋予红色三角形那个类,如果K=5,由于蓝色四方形比例为3/5,因此绿色圆被赋予蓝色四方形类。
三、MATLAB实现
KNN.m:KNN标签预测,输入测试数据、样本数据、样本标签、K值
输出数据:对单个样本预测的标签值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
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 |
Obj.m 目标函数,返回值为标签预测错误率
1 2 3 4 5 6 7 8 9 10 11 12 13 |
function [value] = kgetObj2(train_F,train_L,test_F,test_L) k=4; numTest=size(test_f,1); numTrain=size(train_F,1); error=0; for i=1:numTest classifyresult= knnsix(test_f(i,:),train_f(1:numTrain,:),train_L(1:numTrain,:),k); if(classifyresult~=test_L(i,:)) error=error+1; end end value=error/numTest; end |
[…] KNN算法简介与MATLAB实现:https://www.omegaxyz.com/2018/03/24/knn_matlab/ […]