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;**中是兩個高斯分布的類,變數取x=-3:3,y=-3:3中的資料,看看這些資料都是屬於哪個類。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
下面是執行效果圖:
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 的特徵向量的歐式距離,選取距離最小的...