|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
' N6 I, F$ H# J! l7 ~一、kNN概念描述
! E, A' s3 U6 T6 l3 t' D" h( K+ |! E" {5 T+ @
kNN算法又称为k最近邻(k-nearest neighbor classification)分类算法。所谓的k最近邻,就是指最接近的k个邻居(数据),即每个样本都可以由它的K个邻居来表达。0 j9 M0 w6 o6 W s
% A8 {4 K: Q0 [* B! X6 i
kNN算法的核心思想是,在一个含未知样本的空间,可以根据离这个样本最邻近的k个样本的数据类型来确定样本的数据类型。3 X% |! [8 O5 Q. _" ?* b5 m
. ]" r6 `4 @/ }1 Q4 R% n该算法涉及3个主要因素:训练集、距离与相似的衡量、k的大小;8 T- K7 F P" l: J/ p) }/ }8 V* S: _
' B c) e5 ~1 i8 E
主要考虑因素:距离与相似度的;" u. {3 T# Z* ^3 H$ W7 j$ D
6 `1 D/ Q$ M v- g |
二、举例说明$ E* w: X6 P2 {! }) I6 L
右图中,绿色圆要被决定赋予哪个类,是红色三角形还是蓝色四方形?
& Z8 d1 K5 F: c) _* ^# t2 S/ l; y* ?! m1 x
如果K=3,由于红色三角形所占比例为2/3,绿色圆将被赋予红色三角形那个类,如果K=5,由于蓝色四方形比例为3/5,因此绿色圆被赋予蓝色四方形类。+ I( Q" B( J; q; ?; `: Q) |( ]
, ^* `! v) a1 p O, ]& @$ i* P
* t: j* W9 H2 |) L# ]! C
+ J( t J4 w1 N三、MATLAB实现' E" K+ {1 G0 V0 v& C. t5 V$ I
1 q% x$ f( H8 IKNN.m:KNN标签预测,输入测试数据、样本数据、样本标签、K值
; e# m2 S( W9 \2 j4 f
7 u2 ^% C! M5 r输出数据:对单个样本预测的标签值! u X) L, b: @
3 j& e0 r0 z. h; A: U; 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)));
- end/ X# ^& P. K# Z8 t
+ B0 _/ D Z# z+ n5 ?
1 W8 N! ]9 X/ p+ l4 s8 w
Obj.m 目标函数,返回值为标签预测错误率
' o. e h( E' j9 D
/ F0 N" T8 |& F" f( R3 ~$ {- 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
. K) `: } d2 f$ m; G: R1 ?# Q5 U7 } |
|