|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
Z- ]6 ~) `& w I
一、kNN概念描述
4 B% t2 n+ e- f
4 O; H! j% _. ykNN算法又称为k最近邻(k-nearest neighbor classification)分类算法。所谓的k最近邻,就是指最接近的k个邻居(数据),即每个样本都可以由它的K个邻居来表达。1 } ~, k; @0 `7 J7 d6 }) q
( b) a: Y5 G6 P. }9 r4 f1 v5 i
kNN算法的核心思想是,在一个含未知样本的空间,可以根据离这个样本最邻近的k个样本的数据类型来确定样本的数据类型。- G; y) z$ Q. A3 u2 Y
$ `6 {; P$ F4 q4 b. F5 O. ?/ I
该算法涉及3个主要因素:训练集、距离与相似的衡量、k的大小;
& a/ j1 Z! S: F+ Q% g8 }* i0 r, ~5 _6 o+ j5 J9 z, B( \
主要考虑因素:距离与相似度的;3 i# F7 V1 y# I# y( _' K
' k o7 k) ?0 _7 W二、举例说明
7 @( T( m3 h( F$ `- o$ h: N/ o( B右图中,绿色圆要被决定赋予哪个类,是红色三角形还是蓝色四方形?
' ~5 `- M0 P- b9 @* z( ]
. ~" n1 x8 ?0 Z3 e7 j' p a如果K=3,由于红色三角形所占比例为2/3,绿色圆将被赋予红色三角形那个类,如果K=5,由于蓝色四方形比例为3/5,因此绿色圆被赋予蓝色四方形类。
6 O& K3 {2 h }7 |( P5 {8 _. o4 E& {: d/ w1 t6 R$ c. T$ T' [5 l
0 f" |8 p' b- i- E$ y6 r/ t# C$ n6 ]$ e4 v" ~+ W& ]# p6 F0 O
三、MATLAB实现% [7 A2 R! N4 ~% ?* I: n
& P9 p G; y+ O3 l" z. b& x: W
KNN.m:KNN标签预测,输入测试数据、样本数据、样本标签、K值
3 D4 c2 J1 k5 k6 v; ?) ^5 {: ?- S( L& d0 s
输出数据:对单个样本预测的标签值
; I4 r6 `$ B# ]/ M
; S$ U, `5 ?3 s: r* s5 ?- 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
# P, l* H! Z+ i5 j( c4 j
& ^9 C3 U* ^# Z( b2 s1 v* H! Q6 s; W4 l9 B# g! O
Obj.m 目标函数,返回值为标签预测错误率
2 v9 j; A% G' V& k4 d
$ {: k/ g. N1 Y X9 R/ n- 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( ^( S; j- ]6 l. z' Y2 T+ a$ S
|
|