KNN 手動實現

2021-08-21 10:16:21 字數 1306 閱讀 4688

knn 的實質是根據 **值 與訓練集之間的距離來進行分類。

下面**使用 歐氏距離來表示點集之間的距離,具體**如下:

class knn():

def fit(self, x, y):

self.x_train = x

self.y_train = y

def predict(self, x, k):

x_train = self.x_train

y_train = self.y_train

x = np.tile(x,(x_train.shape[0],1))

diff = (x_train - x) ** 2

diff.sum(axis = 1) ** 0.5 # sum 函式只能是 h.sum(axis = 1)

rank = diff_sum.argsort() # 返回的排序是從小到大排序的

result = {}

for i in range(k):

vote = y_train[rank[i]]

result[vote] = result.get(vote,0) + 1

# 取出最大的值

# 這裡沒用排序,而是用了遍歷,節省了時間和空間複雜度

max_c = 0

num = -1

for k, v in result:

if (v > max_c):

max_c = v

num = k

return num

這裡用到乙個numpy 的內建函式來返回排序之後的index:

np.argsort()

這個函式的返回值是從小到大排序之後的 index,如果想要返回從大到小的 index,應該進行如下操作:

a = np.random.randint(0,100,3)

a.argsort() # 從小到大

(-a).argsort() # 從大到小

a.sum(axis = 1) 表示橫著求和

引包形式:

from sklearn.neighbors import kneighborsclassifier  # 從 sklearn 裡面引包

knn = kneighborsclassifier(n_neighbors = k) # 建立乙個model

knn.fit(x_train, y_train)

y_pred = knn.predict(x_test)

KNN簡單實現

knn算是機器學習入門演算法中比較容易理解的了,要注意和k means的一些區別 knn k means 1.knn是分類演算法 2.監督學習 3.餵給它的資料集是帶label的資料,已經是完全正確的資料 1.k means是聚類演算法 2.非監督學習 3.餵給它的資料集是無label的資料,是雜亂...

knn演算法實現

knn演算法 自己實現 鳶尾花資料集 一.題目描述 題目 自己實現knn演算法 用鳶尾花資料集 knn演算法描述 在訓練集中資料和標籤已知的情況下,輸入測試資料,將測試資料的特徵與訓練集中對應的特徵進行相互比較,找到訓練集中與之最為相似的前k個資料,則該測試資料對應的類別就是k個資料 現次數最多的那...

KNN演算法實現

knn k 近鄰 knn,k nearestneighbor 演算法是一種基本分類與回歸方法,我們這裡只討論分類問題中的 k 近鄰演算法。k 近鄰演算法的輸入為例項的特徵向量,對應於特徵空間的點 輸出為例項的類別,可以取多類。k 鄰演算法假設給定乙個訓練資料集,其中的例項類別已定。分類時,對新的例項...