|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
3 j3 K* ]2 l! s* f
一、kNN概念描述# I+ v# b, s% L' o/ q8 `, g I
g b8 g- X0 \- C, P+ O/ L
kNN算法又称为k最近邻(k-nearest neighbor classification)分类算法。所谓的k最近邻,就是指最接近的k个邻居(数据),即每个样本都可以由它的K个邻居来表达。0 w5 y. e( ^. r C% d
8 y* {3 r, I' _; ^( ?2 O$ g$ ikNN算法的核心思想是,在一个含未知样本的空间,可以根据离这个样本最邻近的k个样本的数据类型来确定样本的数据类型。4 A/ G! s/ W% C1 x" w* Y
" d0 N5 N9 t3 t# ]8 g$ d该算法涉及3个主要因素:训练集、距离与相似的衡量、k的大小;
; m0 ~# T' y+ L' p* E3 @
- X6 C4 E/ u' X8 y& M% Z主要考虑因素:距离与相似度的;$ y9 V- z; F( H; {. r
1 N8 @7 t2 ~3 N7 l& h5 e- r
二、举例说明
, D* o4 I+ p- X# m* x右图中,绿色圆要被决定赋予哪个类,是红色三角形还是蓝色四方形?
7 R. y+ @: _" n7 y' K: N* V8 t, s( a) ~4 |. _
如果K=3,由于红色三角形所占比例为2/3,绿色圆将被赋予红色三角形那个类,如果K=5,由于蓝色四方形比例为3/5,因此绿色圆被赋予蓝色四方形类。8 }4 s, W6 i! g: O6 _
8 `4 f3 q8 v$ k% w0 y
& ~5 n m$ c5 Z% Y' r# v. R* z
三、MATLAB实现) p3 Z& \: C* Z& G4 e$ M( i% O
: o1 q. Z c+ u/ B" U( WKNN.m:KNN标签预测,输入测试数据、样本数据、样本标签、K值
: R& o6 _5 g( @5 J' {% m6 v6 i/ r. Y9 _) q2 ]: v; M+ T N7 ?
输出数据:对单个样本预测的标签值
4 r9 f" i, _/ `7 _. N4 ?
+ J$ \. x& C4 g5 i" d4 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)));
- end7 J( `9 x. m5 Z! \- {. A8 h0 t% ^
7 e/ {' W3 v: e: H& G4 `; ~ X
7 w7 i. ^" l7 U* A- C( i1 c. oObj.m 目标函数,返回值为标签预测错误率
0 h6 u! m+ v; v0 }# b2 Q/ [+ k: c2 l( D# @
- 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 E" p0 e3 x4 y1 Y% [ |
|