|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
! r# r# e4 w0 r$ @9 c8 b, F' m
一、kNN概念描述% `+ }$ Z/ k: b7 T3 Q! O0 i5 }
1 @. w3 u% A/ Y$ y/ FkNN算法又称为k最近邻(k-nearest neighbor classification)分类算法。所谓的k最近邻,就是指最接近的k个邻居(数据),即每个样本都可以由它的K个邻居来表达。
1 e n- S, N- v8 a9 Q& f# U0 z( l; v' r# }& }
kNN算法的核心思想是,在一个含未知样本的空间,可以根据离这个样本最邻近的k个样本的数据类型来确定样本的数据类型。
: e$ S6 V9 y( b; `4 d" b. z% P2 Q. h4 i
该算法涉及3个主要因素:训练集、距离与相似的衡量、k的大小;& I6 I$ m# K6 P* E- v# ]
( f. ~4 J: L; h3 W( s) W7 }
主要考虑因素:距离与相似度的;2 U- g! D) W' Z. ~% r3 @
! O- @$ A& q d2 R; O
二、举例说明- j; ?4 ]+ t7 ]4 l. H
右图中,绿色圆要被决定赋予哪个类,是红色三角形还是蓝色四方形?
& t; S2 {) _( W0 I: j1 @5 b9 [& U# ~) B0 s& E! {
如果K=3,由于红色三角形所占比例为2/3,绿色圆将被赋予红色三角形那个类,如果K=5,由于蓝色四方形比例为3/5,因此绿色圆被赋予蓝色四方形类。4 d7 p" v( S9 W; p; }
) x& }; o- ^; T7 P
. Z1 J: x; j! n/ ]5 V6 I" w
+ I0 V4 H' w3 E# H: J6 [2 S0 R. e三、MATLAB实现
" i" Y8 m1 V- Z+ |. a, {: s1 E. T; {6 S. k
KNN.m:KNN标签预测,输入测试数据、样本数据、样本标签、K值
+ ]: f8 s8 G. l* h# v7 @! y( A! e; Q3 }* C' A
输出数据:对单个样本预测的标签值
. i- k+ c7 F( _, B2 u
- v D; t; m3 s3 j8 a- 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)));
- end5 y4 y' @4 `- c9 u4 a
5 r8 L% `7 t! l% Y2 B; }1 z: H4 Q4 x1 X' ]/ n# N" {8 K
Obj.m 目标函数,返回值为标签预测错误率
2 x2 i, h( H4 c8 s. E7 [6 t
9 `4 x( h w- X1 y: w- 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/ D# A' b0 V+ g
|
|