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 現在我們...