|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
, x) ~3 u8 \( g, u; U" ]8 Z4 m一、kNN概念描述
3 S1 t. o) e$ i, H6 Z8 r, u F0 p
( T% I$ X- U5 o0 m! s2 ~( E& q0 vkNN算法又称为k最近邻(k-nearest neighbor classification)分类算法。所谓的k最近邻,就是指最接近的k个邻居(数据),即每个样本都可以由它的K个邻居来表达。: V% J- A8 u; K# x( f% ^% X
% i* G- J7 O1 H6 skNN算法的核心思想是,在一个含未知样本的空间,可以根据离这个样本最邻近的k个样本的数据类型来确定样本的数据类型。
: C: ~5 Y) m: R Z/ y& ]
: Z5 L2 H. R7 c该算法涉及3个主要因素:训练集、距离与相似的衡量、k的大小;
. ~% l7 z |( E( h8 U2 s0 B' |
) T) X4 u( S/ ~ y: Z _; r( L主要考虑因素:距离与相似度的;
" |, Q9 s8 p2 ~; z1 z; f* }4 V; B7 v" f, S; @, b8 ]+ N
二、举例说明
. T( c2 N5 A8 c: m右图中,绿色圆要被决定赋予哪个类,是红色三角形还是蓝色四方形?1 U; M2 _% d/ m- K7 W
: g8 u6 Z2 E0 X4 W! j; u% s如果K=3,由于红色三角形所占比例为2/3,绿色圆将被赋予红色三角形那个类,如果K=5,由于蓝色四方形比例为3/5,因此绿色圆被赋予蓝色四方形类。
, L) `% r2 Q$ ]7 v* W. X/ l4 z% Z: V
5 p6 J8 \: \9 c1 t* V- U3 m
! D: I' y3 l1 j/ i: `" o' S三、MATLAB实现$ @( A5 p+ m% h7 e2 D/ |
4 y- }4 @/ ?8 ^KNN.m:KNN标签预测,输入测试数据、样本数据、样本标签、K值
3 D: w1 B+ {; S
) F8 S- M& e9 H! l1 H( H! A输出数据:对单个样本预测的标签值
$ u3 e) G! S' s1 [
; m' E6 H7 x3 w; ]) Y3 \( |" z6 x/ W- 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& R9 _$ p1 T% F) B, O2 D
: O5 M* }+ G. Y0 w$ u/ y0 F! x8 x3 m2 R! `
Obj.m 目标函数,返回值为标签预测错误率
6 o0 `7 N, y$ b4 a& W1 G$ r( w2 f0 b3 t. q, {- ^ H
- 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
8 r+ S- n u4 H0 Z, t5 N, n' f U |
|