K鄰近演算法 KNN

2021-08-13 14:42:59 字數 2832 閱讀 8170

k-nearest neighbor  knn演算法

如果乙個樣本在特徵空間中的k個最相似(即特徵空間中最鄰近)的樣本中的大多數屬於某乙個類別,則該樣本也屬於這個類別。

所選擇的鄰居都是已經正確分類的物件。

如果k=3,則綠色圓形的類別與紅色三角形相同

如果k=5,則綠色圓形的類別與藍色正方形相同

the choice of distance is a

hyperparameter.

k的選擇: 不同問題不同對待,一般是嘗試很多不同的k值,找到最好的。

(交叉驗證)用四個fold作為訓練,乙個fold作為驗證,迴圈。

距離選擇:

效率低並不提供詳細的資訊

knn演算法matlab實現(一次**乙個點)

function ytest = knn(x, y, xtest, k)

% x = [1,3; 2,2; 1,1; 3,1; 3,0.5; 2,0.5]

% y = [0;0;1;1;1;1]

% xtest = [1,2]

% k =3 k =5

m = size(x,1);

n = size(x,2);

mtest = size(xtest,1);

dis = zeros(m,1);

for i = 1:m,

temp = 0;

for j = 1:n

temp = temp + (xtest(1,j) - x(i,j))^2;

end;

temp = temp.^0.5;

dis(i,1) = temp;

end;

ordered_dis = sort(dis);

disp(ordered_dis);

max_dis = ordered_dis(k);

index = find(dis<=max_dis);

num = size(index,1);

tar_y = y(index);

count = zeros(num,1);

for i = 1:num,

count(i) = size(find(tar_y == tar_y(i)),1);

end;

tar_index = find(count==max(count));

ytest = tar_y(tar_index(1));

tips: 在matlab中,for迴圈中無法改變迴圈變數的值,用while可以。

python實現

import numpy

def knn(x, y, xtest, k):

m = x.shape[0]

n = x.shape[1]

print(m)

print(n)

ytest = 0

temp = (numpy.tile(xtest, (m, 1)) - x)**2

dis =

for z in range(m):

s = 0

for l in range(n):

s = s + temp[z][l]

print(dis)

index = numpy.argsort(dis)

index = index[0:k]

print(index)

tar_y =

for i in index:

print(tar_y)

count = 0

class_index = 0

for j in tar_y:

print('j =',j)

if count < tar_y.count(j):

count = tar_y.count(j)

print(count)

ytest = tar_y[class_index]

class_index = class_index + 1

return ytest

x = numpy.array([[1, 3], [2, 2], [1, 1], [3, 1], [3, 0.5], [2, 0.5]])

y = [0, 0, 1, 1, 1, 1]

k = 3

xtest = [1, 2]

ytest = knn(x, y, xtest, k)

print(ytest)

k最鄰近演算法 加權kNN

上篇文章中提到為每個點的距離增加乙個權重,使得距離近的點可以得到更大的權重,在此描述如何加權。該方法最簡單的形式是返回距離的倒數,比如距離d,權重1 d。有時候,完全一樣或非常接近的商品權重會很大甚至無窮大。基於這樣的原因,在距離求倒數時,在距離上加乙個常量 weight 1 distance co...

機器學習 K 鄰近演算法 KNN

k 鄰近演算法 有監督演算法 演算法工作原理 存在乙個樣本資料集合,也稱作訓練樣本集,並且樣本集中每個資料都存在標籤,即我們知道樣本集中每乙個資料與所屬分類的對應關係。輸入沒有標籤的新資料後,將新資料的每乙個特徵與樣本集中資料對應的特徵進行比較,然後演算法提供樣本集中特徵最相似資料 最鄰近 的分類標...

機器學習 k鄰近演算法 KNN

title 機器學習 k鄰近演算法 knn date 2019 11 16 20 20 41 mathjax true categories 外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳 img ae8zaru7 1573908679258 1573907207887.png 現在我們...