|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
, [) f3 e8 Y0 z' G; `一、kNN概念描述2 W. m. C. i+ K7 H( ]- q! a% e
% T7 L/ x! V- ?. ]2 t0 ^: w* LkNN算法又称为k最近邻(k-nearest neighbor classification)分类算法。所谓的k最近邻,就是指最接近的k个邻居(数据),即每个样本都可以由它的K个邻居来表达。
: y% I6 b1 I7 q, l+ Q/ a
$ u8 r# v! d* K* SkNN算法的核心思想是,在一个含未知样本的空间,可以根据离这个样本最邻近的k个样本的数据类型来确定样本的数据类型。
5 b& R; W/ v6 A
/ D: t) l& l3 h P, V该算法涉及3个主要因素:训练集、距离与相似的衡量、k的大小;
( [9 @( r: W* f- R2 T9 O2 ^" ~9 O# N) _ C# r- L5 Y9 E
主要考虑因素:距离与相似度的;
; Y+ m0 c1 _7 R' r C6 ^! ^% Z: |% {) o2 A
二、举例说明
7 |+ E( C: A) K- g9 M右图中,绿色圆要被决定赋予哪个类,是红色三角形还是蓝色四方形? H `3 G5 u) Y: X( U
3 ]+ d+ G4 ?! o+ n- [: C+ j0 M4 A
如果K=3,由于红色三角形所占比例为2/3,绿色圆将被赋予红色三角形那个类,如果K=5,由于蓝色四方形比例为3/5,因此绿色圆被赋予蓝色四方形类。
8 \* K4 k1 Y2 y; x2 X3 T0 S; ^, |
/ v5 _! W8 ~( y7 R. k3 X* }$ a
0 m/ @+ v, `7 y$ O三、MATLAB实现9 y1 L% b% \4 C! o x# j: z8 b
: c! ^/ c6 G% }$ l4 c& L6 FKNN.m:KNN标签预测,输入测试数据、样本数据、样本标签、K值' }# f2 {7 V/ F
( q0 q$ M0 g, S: J; X
输出数据:对单个样本预测的标签值8 k/ @% ?- o. _/ B: R- X; y$ \
G5 @1 x O7 V, B* g8 H+ g# l5 `5 {1 c- 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
O; h. R0 ^* c" A
# H" R0 n8 \$ e, R: i% k) f, D+ z; j. X
Obj.m 目标函数,返回值为标签预测错误率9 y- \$ L+ ~6 Q J1 g" \# K6 H
! ~9 y, B( K: P1 Z. n$ 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$ U: s8 H& e% X \7 M. k' a3 n
|
|