|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
3 c7 o# U B+ ^ F) t! ]* ^一、kNN概念描述
$ b! _- b: D% v0 A6 @
/ _# F' p/ {" j6 x( ZkNN算法又称为k最近邻(k-nearest neighbor classification)分类算法。所谓的k最近邻,就是指最接近的k个邻居(数据),即每个样本都可以由它的K个邻居来表达。6 A' a+ ^( U" n# Y
$ @; ?6 |/ ~4 H7 X) K. j
kNN算法的核心思想是,在一个含未知样本的空间,可以根据离这个样本最邻近的k个样本的数据类型来确定样本的数据类型。; c/ B& x; d; G3 I. M. F
7 D' [! I5 D/ {+ G
该算法涉及3个主要因素:训练集、距离与相似的衡量、k的大小;" @4 J0 I0 [/ ^7 k2 L
; f1 c! U( \+ h6 R5 g& w主要考虑因素:距离与相似度的; J# T2 b: J& b
, v( @2 N+ _+ w( o, R0 E
二、举例说明; A/ R U1 T# g+ z6 `2 D
右图中,绿色圆要被决定赋予哪个类,是红色三角形还是蓝色四方形?
) ^. p( J/ {+ {0 J2 U/ M
. T r* k0 }, ~1 H如果K=3,由于红色三角形所占比例为2/3,绿色圆将被赋予红色三角形那个类,如果K=5,由于蓝色四方形比例为3/5,因此绿色圆被赋予蓝色四方形类。- k @+ Y+ u. k, _6 J# \) o8 S
5 \3 D' D5 n1 E$ p& w
2 y) J! |1 r+ z# S; e6 c2 P. M4 j5 u0 w
三、MATLAB实现3 g9 b! S& N8 h
# E7 t8 C$ F; P& g% `
KNN.m:KNN标签预测,输入测试数据、样本数据、样本标签、K值
' @1 J: V7 h7 [- J- D
' x" ]+ V B' R V5 b输出数据:对单个样本预测的标签值
6 e `" s% D& T5 f/ q
5 |) [5 F1 D1 t* e" R0 @8 @- 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
) H+ `# d) u _4 U1 h* A# ] 2 q) c2 t: [! w# q
v3 \- _/ m0 v. ], V. I* n
Obj.m 目标函数,返回值为标签预测错误率
7 v3 B6 ~2 ~& K, f# l1 w$ u
9 B& S" s5 P- K& @. v- 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
4 L/ \% t2 l/ l& M# c |
|