學習筆記(一)k 近鄰演算法(KNN)

2021-09-11 09:17:39 字數 2377 閱讀 3772

終於找到《機器學習實戰》這本書了,在此記錄一些總結,便於回顧。

knn的工作原理是:

存在乙個樣本資料集合,也稱作訓練樣本集,並且樣本集中每個資料都存在標籤,即我們知道樣本集中每一資料與所屬分類的對應關係。輸入沒有標籤的新資料後,將新資料的每個特徵與樣本集中資料對應的特徵進行比較,然後演算法提取樣本集中特徵最相似資料(最近鄰)的分類標籤。一般來說,我們只選擇樣本資料集中前k個最相似的資料,這就是k-近鄰演算法中k的出處,通常k是不大於20的整數。最後,選擇k個最相似資料**現次數最多的分類,作為新資料的分類。

我的理解:是在訓練樣本中找出與新資料(測試樣本)距離最近的k個樣本,這k個樣本中哪個類別的樣本數最多,新資料就屬於哪一類。

距離選擇

歐氏距離:d(x

,y)=

∑k=1

n(xk

−yk)

2d(x,y)= \sqrt^}

d(x,y)

=k=1

∑n​(

xk​−

yk​)

2​曼哈頓距離:d(x

,y)=

∑k=1

n∣xk

−yk∣

d(x,y)= \quad \sum_^

d(x,y)

=k=1

∑n​∣

xk​−

yk​∣

(1) 收集資料:可以使用任何方法。

(2) 準備資料:距離計算所需要的數值,最好是結構化的資料格式。

(3) 分析資料:可以使用任何方法。

(4) 訓練演算法:此步驟不適用於k-近鄰演算法。

(5) 測試演算法:計算錯誤率。

(6) 使用演算法:首先需要輸入樣本資料和結構化的輸出結果,然後執行k-近鄰演算法判定輸

入資料分別屬於哪個分類,最後應用對計算出的分類執行後續的處理。

# -*- coding: utf-8 -*-

import numpy as np

from tensorflow.examples.tutorials.mnist import input_data

mnist = input_data.read_data_sets("mnist_data/", one_hot=false)

class knn():

def fit(self,x_train,y_train):

'''x_train資料格式:每一列表示乙個屬性,每一行表示乙個樣本

y_train資料格式:一維陣列,表示標籤,與x_train相對應

'''self.x_train = x_train

self.y_train = y_train

def predict(self,x_test,k = 1):

self.k = k

#計算歐式距離

distance = (np.sum((self.x_train - x_test) ** 2,1)) ** 0.5

sortindex = np.argsort(distance)

sortindex_k = sortindex[:self.k]

lable_k = self.y_train[sortindex_k]

labelcount = {}

for i in lable_k:

if i in labelcount:

labelcount[i] += 1

else:

labelcount[i] = 1

result = sorted(labelcount.items(), key=lambda k:k[1], reverse=true)

return result[0][0]

if __name__ == '__main__':

x_train = mnist.train.images

y_train = mnist.train.labels

x_test = mnist.test.images

y_test = mnist.test.labels

knn = knn()

#由於訓練樣本較多,可以考慮選擇部分樣本作為輸入

knn.fit(x_train,y_train)

y_predict =

#選擇了測試集前10個樣本做測試

for i in range(10):

print('**值:',y_predict)

print('實際結果:',y_test[:10])

k-近鄰演算法是分類資料最簡單最有效的演算法,但是當訓練樣本數量非常大時,必定會耗費非常多的計算機資源,由於必須對資料集中的每個資料計算距離值,實際使用時可能非常耗時。

為了緩解這些缺點,可以嘗試將原始資料進行降維,減少計算量,另外,當樣本數量比較多,而類別較少時,可以適當較少的選擇樣本進行訓練。

機器學習 k 近鄰演算法(kNN)學習筆記

knn的工作原理是 有乙個訓練樣本集,並且樣本集中每個資料都存在標籤 對應關係 輸入沒有標籤的新資料後,將新資料的每個特徵與樣本集中資料對應的特徵進行比較,然後演算法提取樣本集中特徵最相似資料 最近鄰 的分類標籤。我們只選擇樣本資料集中前k個最相似的資料,這就是knn中的k,通常取不大於20的整數。...

《機器學習實戰》學習筆記一 k 近鄰演算法(kNN)

k 近鄰演算法 以下簡稱knn 是分類演算法中比較簡單的一種,knn演算法的一般流程為 1 收集資料,如從檔案中匯入資料 2 準備資料,將資料轉化為適合計算的格式,如矩陣的形式 3 分析資料 4 測試資料,計算分類的錯誤率 5 應用演算法,給定輸入,得到相應的輸出,指出改資料屬於哪一種分類。knn演...

K 近鄰演算法 KNN

knn k nearest neighbor 假設訓練集有記錄 r1 r2,rn共n條,訓練集的特徵向量及其對應的類別都是已知的,每個記錄的特徵向量為 t1 t2,tk共k個特徵,待測試的記錄為ru 1 計算ru 的特徵向量與訓練集的每條記錄 即r1 r2,rn 的特徵向量的歐式距離,選取距離最小的...