終於找到《機器學習實戰》這本書了,在此記錄一些總結,便於回顧。
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-近鄰演算法判定輸
入資料分別屬於哪個分類,最後應用對計算出的分類執行後續的處理。
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 近鄰演算法(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 的特徵向量的歐式距離,選取距離最小的...