|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
* g' z9 s3 D1 D一、kNN概念描述
* S/ h& t: o, A* ?/ t" S6 y( M/ N8 T7 ^. ~5 e: s" X0 H2 y# h
kNN算法又称为k最近邻(k-nearest neighbor classification)分类算法。所谓的k最近邻,就是指最接近的k个邻居(数据),即每个样本都可以由它的K个邻居来表达。; r: A% Z/ M @- {
! n0 K. n6 Q8 m" ~) EkNN算法的核心思想是,在一个含未知样本的空间,可以根据离这个样本最邻近的k个样本的数据类型来确定样本的数据类型。; N- `; I$ x @/ r
) s2 s: V; {) O+ N8 O. Q7 i该算法涉及3个主要因素:训练集、距离与相似的衡量、k的大小;/ ~2 c, N" ?! P+ ~: M
5 A& p8 e8 U v! x1 L主要考虑因素:距离与相似度的;- j& F; e D% R5 j( t+ Z
- f5 U, c* D$ h. d, r u
二、举例说明
) D `+ ?, h6 c5 Y* |1 }右图中,绿色圆要被决定赋予哪个类,是红色三角形还是蓝色四方形?' T' v1 \* _. O6 J5 {
* E2 Y- `8 e# }+ l; p) k
如果K=3,由于红色三角形所占比例为2/3,绿色圆将被赋予红色三角形那个类,如果K=5,由于蓝色四方形比例为3/5,因此绿色圆被赋予蓝色四方形类。
5 s- P5 b( m: s2 Y+ [& B& L
; z6 V5 a/ h4 m/ F/ q" e4 x+ h, O
: K- ]- z/ m" B& q
* m$ ~+ C F+ C8 F0 \
三、MATLAB实现
* t2 O, F& ^$ L$ S" @3 [
+ U5 _* ~$ s) [( uKNN.m:KNN标签预测,输入测试数据、样本数据、样本标签、K值1 N) I% b+ i1 m/ M* ?' ?9 s' O' p q
& M; B; V# r1 _" y输出数据:对单个样本预测的标签值# f3 C! l7 A" i
7 a8 l3 H8 I0 q( D: h1 }' u- 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)));
- end3 R* |) w- k& R3 y' u
# L* _6 u" B# r. c \# ^( ~& n: O7 V$ t7 c' n
Obj.m 目标函数,返回值为标签预测错误率" l( X$ H2 ?7 Y8 _
" ]/ z& O- g1 F& j. b2 f- 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
6 |' Z- I3 g4 M4 O6 U# ?6 ]9 u$ s- x+ J |
|