|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
# ~. |5 d' j8 [ P& `9 j/ l
一、kNN概念描述
8 @4 a5 u. [* X+ ?) A# ~* [0 |7 z! ?0 s& j/ F# m/ @3 t
kNN算法又称为k最近邻(k-nearest neighbor classification)分类算法。所谓的k最近邻,就是指最接近的k个邻居(数据),即每个样本都可以由它的K个邻居来表达。
, ~- z: F$ y; r* ~8 R4 g% e t$ u7 w- V% {! l/ Z
kNN算法的核心思想是,在一个含未知样本的空间,可以根据离这个样本最邻近的k个样本的数据类型来确定样本的数据类型。
0 i3 ?7 ^' N* g* i$ J# C! ^/ x) ~7 K% T# I' G4 f# v
该算法涉及3个主要因素:训练集、距离与相似的衡量、k的大小;
' ^- Z ?# u, J+ s
* w0 M. r8 t6 d- v8 \, ]主要考虑因素:距离与相似度的;) q0 B" `+ X* ]) i+ H
+ w B7 m `+ e3 k" u. I: }
二、举例说明; ]2 g: Z$ j6 f
右图中,绿色圆要被决定赋予哪个类,是红色三角形还是蓝色四方形?) h0 W6 s$ S6 k+ U9 k; ]$ o4 Y
: V- ^9 I3 Q, S+ x/ b6 D1 [- K y
如果K=3,由于红色三角形所占比例为2/3,绿色圆将被赋予红色三角形那个类,如果K=5,由于蓝色四方形比例为3/5,因此绿色圆被赋予蓝色四方形类。
7 T5 x, }# k; {; F# W% {: _8 |2 _- h) C: u; |6 T
; }. B8 H. O/ ?' K9 t! t9 F6 l5 `. c1 i# _! L
三、MATLAB实现% M) F& T7 h1 G- h: k7 w6 ~
9 c" h+ a1 o! }
KNN.m:KNN标签预测,输入测试数据、样本数据、样本标签、K值/ ^* G2 j/ f# I1 w0 ~: {' k& j! f4 `. [, s3 u
% K" e4 u8 u4 I' g: e/ Z
输出数据:对单个样本预测的标签值6 n2 t4 Z+ t7 [( y
. O6 |: @2 N( E- 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
/ D. o6 m+ f z3 \& ` g6 U ' l4 ]5 i. h3 L6 v! m. k3 R! s5 N
. T" g6 z4 C/ ~1 n7 [
Obj.m 目标函数,返回值为标签预测错误率+ n& A+ k" _1 M
. c& [! n$ O# ^& M$ o8 j" c! A: S- 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
2 E) h- K! R+ g6 t. ?- p& \3 G |
|