|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
& p. r) L- r/ n6 i. R' o" c8 _一、kNN概念描述; }. y! h0 }# O# }) k2 f1 S6 c
H" ?, v9 s" C. o0 p" u, ykNN算法又称为k最近邻(k-nearest neighbor classification)分类算法。所谓的k最近邻,就是指最接近的k个邻居(数据),即每个样本都可以由它的K个邻居来表达。
3 K% J" P) S/ l8 f1 }6 L( E
5 {: [+ B. w3 akNN算法的核心思想是,在一个含未知样本的空间,可以根据离这个样本最邻近的k个样本的数据类型来确定样本的数据类型。
3 b, x4 N. d5 y2 t! n3 p+ |; h% Q+ Y- N# ^$ F/ o% k. m- E
该算法涉及3个主要因素:训练集、距离与相似的衡量、k的大小;
- R* b- C$ G9 U6 Z; V% n# J
) Q$ L% t7 z1 _主要考虑因素:距离与相似度的;$ G& f( D5 B! e0 ^" V
7 }' d, L" Q4 o0 U
二、举例说明
2 d: S: f, _/ y1 `/ j9 U右图中,绿色圆要被决定赋予哪个类,是红色三角形还是蓝色四方形?8 l+ M9 Z6 x: T& Z4 Y9 b
( r$ f% v6 K% {, H
如果K=3,由于红色三角形所占比例为2/3,绿色圆将被赋予红色三角形那个类,如果K=5,由于蓝色四方形比例为3/5,因此绿色圆被赋予蓝色四方形类。
5 x' {6 B, r" Y! R9 I( }% F+ e6 H% [$ H0 ?7 h
' {2 m' i. ~& k! B' b8 P
* s. |. v# n/ W% U
三、MATLAB实现# a+ P4 E$ g3 m y/ y
4 a& `' d% A* I. MKNN.m:KNN标签预测,输入测试数据、样本数据、样本标签、K值% ?1 R/ }4 y' d+ j7 T* M! ^! C
6 |$ U v9 n/ X4 g# W
输出数据:对单个样本预测的标签值
- k ]( }- _: J( N H C1 z! ~4 a$ ?: M# ~1 f
- 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
5 A, G) J m2 J$ o% t
% F* B3 W, Z, i2 i6 Q# ]- i+ b9 ~, J+ d
Obj.m 目标函数,返回值为标签预测错误率
+ J0 u. M' J( t# b3 u& S; b' ?* C$ f8 r1 A5 z: O% C
- 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& z1 N# u3 M" G, O6 t. Q
|
|