|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
% r) ~1 k7 }* }; r) }5 D9 m
一、kNN概念描述% k2 {* `4 }. n4 o7 Q0 `
7 r$ m, l; ^% Z6 ?1 ~
kNN算法又称为k最近邻(k-nearest neighbor classification)分类算法。所谓的k最近邻,就是指最接近的k个邻居(数据),即每个样本都可以由它的K个邻居来表达。
& D( K5 p" m4 _ _: N i c& O, V8 k$ A9 p1 [: x% ^: A# M. d
kNN算法的核心思想是,在一个含未知样本的空间,可以根据离这个样本最邻近的k个样本的数据类型来确定样本的数据类型。- l6 n" ?- g& f F% [, B
0 D3 R2 U0 J/ c" n5 ^' y该算法涉及3个主要因素:训练集、距离与相似的衡量、k的大小;
1 M) q7 s: ]1 O
3 {6 |, v, D4 C" T3 w主要考虑因素:距离与相似度的;* ^- f @& ]+ y9 \. @2 ]7 ~: W' B
; X- N) e( w; s: b( d2 D3 E M @
二、举例说明
G. X( J' \( W& j! j右图中,绿色圆要被决定赋予哪个类,是红色三角形还是蓝色四方形?7 u7 M: C0 N- R; u- |6 g( ^ L
. q" S. f) Y4 P( U3 S
如果K=3,由于红色三角形所占比例为2/3,绿色圆将被赋予红色三角形那个类,如果K=5,由于蓝色四方形比例为3/5,因此绿色圆被赋予蓝色四方形类。
0 O R* X4 k a1 e1 G8 R/ d5 U* e* Z, Q5 K
9 N: X& t. v9 Y# s4 W" I# J5 n! h7 P& n
三、MATLAB实现+ ?% ?: W s: m8 S9 h# K
; `# a5 d2 N2 ]8 d$ z3 ?
KNN.m:KNN标签预测,输入测试数据、样本数据、样本标签、K值, D! J% v. m; d! m8 X
" s- s6 R4 H; h/ w; ^& [, j" ~
输出数据:对单个样本预测的标签值$ S* j2 U W+ N( D% m
! ]1 z# G/ C2 N% x) t
- 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- H3 w0 J& @ M
1 l* D+ k# g8 @8 `/ w( s: E* n: a* u$ o
Obj.m 目标函数,返回值为标签预测错误率- f. [0 y' g) n9 j5 I
$ n9 g( X+ E' w( J/ A- 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;
- end3 O$ j2 u% g% E" |
|
|