機器學習演算法之KNN

2021-08-28 22:07:24 字數 2065 閱讀 7240

物以類聚、人以群分,乙個例項與它周圍的例項屬於同一類的概率較大。

給定乙個訓練資料集,對新輸入的例項,在訓練資料集中找到與該例項最鄰近的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...