k近鄰分類 kNN

2021-07-26 20:58:54 字數 2822 閱讀 9905

k近鄰分類(knn)

一、knn原理

knn屬於監督分類方法,原理是利用某種距離度量方式來計算未知資料與已知資料的距離,並根據距離來確定資料光譜間的相似性,選取最近的k個距離作為判定未知資料類別的依據。在分類時,knn常用方法有:投票法,根據k個距離對應已知資料的類別進行統計,把出現次數最多的類別作為未知資料的類別;平均法,利用k個距離及其對應已知資料的類別,計算k個距離中不同類別下的平均距離,把未知資料劃分到平均距離最小的類別中去;加權法,根據k個距離對應已知資料的類別,再由這k個距離的遠近設定權值,距離越遠權值越大,反之越小,然後計算k個距離在各類別中的加權和,最後把最小加權和對應的類別作為未知資料的類別。

根據knn演算法的原理可知,k值的選取對分類結果影響較大,圖2.7為不同k值的分類結果,圖中採用投票法來辨別未知資料的類別。從圖2.7可以看出不同的k得到的類別是不同的,使用knn分類時,k值的確定將是乙個難點。

二、knn具體操作:

k最鄰近密度估計技術是一種分類方法,不是聚類方法。

不是最優方法,實踐中比較流行。

通俗但不一定易懂的規則是:

1.計算待分類資料和不同類中每乙個資料的距離(歐氏或馬氏)。

2.選出最小的前k資料個距離,這裡用到選擇排序法。

3.對比這前k個距離,找出k個資料中包含最多的是那個類的資料,即為待分類資料所在的類。

不通俗但嚴謹的規則是:

給定乙個位置特徵向量x和一種距離測量方法,於是有:

1.在n個訓練向量外,不考慮類的標籤來確定k鄰近。在兩類的情況下,k選為奇數,一般不是類m的倍數。

2.在k個樣本之外,確定屬於wi,i=1,2,...m類的向量的個數ki,顯然sum(ki)=k。

3.x屬於樣本最大值ki的那一類wi。

如下圖,看那個綠色的值,是算三角類呢還是算矩類形呢,這要看是用幾nn了,要是3nn就屬於三角,要是5nn就屬於矩形。

至於k到底取幾,不同情況都要區別對待的。

下面是相關matlab**:

clear all;

close all;

clc;

%%第乙個類資料和標號

mu1=[0

0]; %均值

s1=[0.3

0;00.35

]; %協方差

data1=mvnrnd(mu1,s1,100

); %產生高斯分布資料

plot(data1(:,

1),data1(:,2),'+'

);label1=ones(100,1

);hold on;

%%第二個類資料和標號

mu2=[1.25

1.25

];s2=[0.3

0;00.35

];data2=mvnrnd(mu2,s2,100

);plot(data2(:,

1),data2(:,2),'ro'

);label2=label1+1

;data=[data1;data2];

label=[label1;label2];

k=11

; %兩個類,k取奇數才能夠區分測試資料屬於那個類

%測試資料,knn演算法看這個數屬於哪個類

for ii=-3:0.1:3

for jj=-3:0.1:3

test_data=[ii jj]; %測試資料

label=[label1;label2];

%%下面開始knn演算法,顯然這裡是11nn。

%求測試資料和類中每個資料的距離,歐式距離(或馬氏距離)

distance=zeros(200,1

);

for i=1:200

distance(i)=sqrt((test_data(1)-data(i,1)).^2+(test_data(2)-data(i,2)).^2

);

end%選擇排序法,只找出最小的前k個資料,對資料和標號都進行排序

for i=1

:k ma=distance(i);

for j=i+1:200

if distance(j)

ma=distance(j);

label_ma=label

(j);

tmp=j;

endend

distance(tmp)=distance(i); %排資料

distance(i)=ma;

label(tmp)=label

(i); %排標號,主要使用標號

label(i)=label

_ma;

endcls1=0

; %統計類1中距離測試資料最近的個數

for i=1

:k

iflabel(i)==1

cls1=cls1+1

;

endend

cls2=k-cls1; %類2中距離測試資料最近的個數

if cls1>cls2

plot(ii,jj); %屬於類1的資料畫小黑點

endend

end

**中是兩個高斯分布的類,變數取x=-3:3,y=-3:3中的資料,看看這些資料都是屬於哪個類。

下面是執行效果圖:

K近鄰(KNN) 分類演算法

k近鄰 knn 分類演算法 knn是non parametric分類器 不做分布形式的假設,直接從資料估計概率密度 是memory based learning.knn不適用於高維資料 curse of dimension machine learning的python庫很多,比如mlpy 更多pa...

k近鄰法 kNN分類

模型原型 sklearn.neighbors.kneighborsclassifier n neighbors 5,weights uniform algorithm auto leaf size 30,p 2,metric minkowski metric params none,n jobs 1...

K 近鄰演算法 KNN

knn k nearest neighbor 假設訓練集有記錄 r1 r2,rn共n條,訓練集的特徵向量及其對應的類別都是已知的,每個記錄的特徵向量為 t1 t2,tk共k個特徵,待測試的記錄為ru 1 計算ru 的特徵向量與訓練集的每條記錄 即r1 r2,rn 的特徵向量的歐式距離,選取距離最小的...