物以類聚、人以群分,乙個例項與它周圍的例項屬於同一類的概率較大。
給定乙個訓練資料集,對新輸入的例項,在訓練資料集中找到與該例項最鄰近的k個例項,這k個例項的多數屬於某個類,就把該輸入例項分為這個類。
這裡,選用了歐氏距離,k的預設值為3,使用了sklearn提供的digits資料集來進行測試。
'''
input: x_train: (m, n) matrix
y_train: (m, ) vector
x_test: (k, l) matrix
y_test: (k, ) vector
'''import numpy as np
import numpy.linalg as la
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_digits
class
knn():
def__init__
(self, k=3)
: self.k = k
deffit(self, x_train, y_train)
: self.x_train = x_train
self.y_train = y_train
defpredict_
(self, one_data)
:
dist = la.norm(self.x_train - one_data,
ord=
2, axis=1)
index = dist.argsort(
) class_count =
for i in
range
(self.k)
: vote_class = self.y_train[index[i]
] class_count[vote_class]
= class_count.get(vote_class,0)
+1sorted_class_count =
sorted
(class_count.items(
), key=
lambda d: d[1]
, reverse=
true
)return sorted_class_count[0]
[0]def
predict
(self, x_test)
:return np.array(
[self.predict_(val)
for i, val in
enumerate
(x_test)])
defscore
(self, x_test, y_test)
:return
sum(self.predict(x_test)
==y_test)
/len
(y_test)
digits = load_digits(
)x = digits.data
y = digits.target
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=
0.33
, random_state=42)
knn = knn(
)knn.fit(x_train, y_train)
res = knn.predict(x_test)
print
('real--->predicted'
)for i, val in
enumerate
(y_test)
:print
(' %d ---> %d'
%(val, res[i]))
print
('**準確率:'
)print
(knn.score(x_test, y_test)
)
機器學習之KNN演算法
在幾位志同道合的小夥伴的帶領下,開始了機器學習的路程,然而一切並不是想象的那麼簡單,因此本文記錄了自己的學習路程,希望還能堅持做好這件事。knn演算法是機器學習中屬於比較簡單的演算法,容易理解和閱讀。1.knn的應用 客戶流失 欺詐偵測等 更適合於稀有事件的分類問題 2.優缺點 優點 這是乙個簡單有...
機器學習之kNN演算法
knn原理及實踐 1 演算法介紹 總的來說,機器學習入門的第乙個演算法是k 近鄰演算法 knn 它的工作原理是 存在乙個樣本資料集合,也稱作訓練樣本集,並且樣本集中每個資料都存在標籤,即我們知道樣本集中每一資料與所屬分類的對應關係。輸入沒有標籤的新資料後,將新資料的每個特徵與樣本集中資料對應的特徵進...
機器學習之KNN演算法
如果乙個樣本在特徵空間中的k個最相似 即特徵空間中最鄰近 的樣本中的大多數屬於某乙個類別,則該樣本也屬於這個類別。knn是一種非常古老而且簡單的分類方法 a a1,a2,a3 b b1,b2,b3 兩點的歐式距離是 因為計算的特徵值的平方,所以計算前需要先進行特徵處理 sklearn.neighbo...