|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
" g* ]; V( F# |* v7 P1 K4 [- f9 {
一、kNN概念描述
& _9 x/ n" W* K" w: h1 y6 H8 @" M' ~" U! @
kNN算法又称为k最近邻(k-nearest neighbor classification)分类算法。所谓的k最近邻,就是指最接近的k个邻居(数据),即每个样本都可以由它的K个邻居来表达。5 e/ |) r0 ?7 K; d! w
6 m- k3 b( d1 c$ Q: BkNN算法的核心思想是,在一个含未知样本的空间,可以根据离这个样本最邻近的k个样本的数据类型来确定样本的数据类型。9 X K& R: D* G4 G' c+ ?
) P" X0 Y+ K/ |5 g! q
该算法涉及3个主要因素:训练集、距离与相似的衡量、k的大小;" ^8 {( e5 Z* O' z2 K* P
) s. H. A D& _ Q
主要考虑因素:距离与相似度的;. \1 h6 j# g! f! c9 z3 d
4 V2 B! N* U' W: A% t; ]
二、举例说明
0 V+ l4 M9 k; X6 [2 c# d5 M右图中,绿色圆要被决定赋予哪个类,是红色三角形还是蓝色四方形?
/ N# S+ d# a/ T2 T7 {, I8 T: y% ]
% p; J. x# q" R! E如果K=3,由于红色三角形所占比例为2/3,绿色圆将被赋予红色三角形那个类,如果K=5,由于蓝色四方形比例为3/5,因此绿色圆被赋予蓝色四方形类。" [/ b2 G) m! |/ R0 f
$ c1 {7 [3 P; U! X- c- f! U6 Z, d
- d+ t% S8 L3 P3 Y9 _3 O
2 ^) Y( L. K/ D& W" q- N三、MATLAB实现: t2 x; ~/ V2 k+ `7 f* v4 S4 V
: y: O n: g# lKNN.m:KNN标签预测,输入测试数据、样本数据、样本标签、K值# V8 f: u+ ~' _) V
& ], d% c, a) q* F( ?/ P* T; X0 V输出数据:对单个样本预测的标签值
1 j9 P) f. v$ @6 t/ Q) y; c! [: E2 ?: r
- 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+ s6 r3 b: c, h( W
% a; ~% S6 p1 ~3 D: _9 y& z$ C- c5 R4 a# N3 K `2 [
Obj.m 目标函数,返回值为标签预测错误率/ B2 P' y) o( f" f
2 [5 |$ [- D% C( F$ Y
- 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. O8 w' d) r& E* ^5 Q/ T, _7 G; b
|
|