|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
, ~: E# |3 C1 G: X# A$ Y( Z0 I一、kNN概念描述
_" m' E, q+ [5 m/ e. l
& E4 Y# H" y0 akNN算法又称为k最近邻(k-nearest neighbor classification)分类算法。所谓的k最近邻,就是指最接近的k个邻居(数据),即每个样本都可以由它的K个邻居来表达。 A6 B% D) S8 I5 T* m
[) q' ]+ i+ O4 M. Z+ fkNN算法的核心思想是,在一个含未知样本的空间,可以根据离这个样本最邻近的k个样本的数据类型来确定样本的数据类型。2 q. A! c( ~5 L* s6 Q
o7 G* Y: f# [8 a9 X该算法涉及3个主要因素:训练集、距离与相似的衡量、k的大小;: U; R" ^* P; }0 u- ]
- N) {: n2 I+ ]: d1 V* q( H
主要考虑因素:距离与相似度的;, `, @* t4 I3 b
( P6 g4 Q) @5 Z. K: C
二、举例说明) _% g/ D" |- s9 {$ U: c
右图中,绿色圆要被决定赋予哪个类,是红色三角形还是蓝色四方形?6 B6 g3 m, R. ]# U: K5 c5 T
8 y6 `% l4 c) n$ H+ K6 L& _) A如果K=3,由于红色三角形所占比例为2/3,绿色圆将被赋予红色三角形那个类,如果K=5,由于蓝色四方形比例为3/5,因此绿色圆被赋予蓝色四方形类。' D' [0 W/ b7 t1 m* @( v
- r9 l6 } Q9 [) q% C
- h: t6 C9 `8 i0 ]& T4 N
$ m+ w8 n: f% M+ v' C. n: ?
三、MATLAB实现
4 D* ]+ I& d' c' j/ m/ H% @* q- ~) Z4 m* M
KNN.m:KNN标签预测,输入测试数据、样本数据、样本标签、K值
6 B, `7 }+ R/ b2 B% Y; q- ~3 O; y3 m9 G$ H+ T1 t' M
输出数据:对单个样本预测的标签值7 R& B9 ^* d/ p4 l
7 t5 }7 t; g: r" ^4 {3 P2 j
- 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/ R P9 x7 @! O, {
# i' S4 q# r2 ]; N' f0 _
7 g2 o1 b% I- q/ UObj.m 目标函数,返回值为标签预测错误率
. S L, F5 s* O/ [" }% P! d! o7 n) N4 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
: F5 D! r4 H; `$ V# j$ m |
|