機器學習實戰之k 近鄰演算法(KNN)識別手寫數字

2021-08-28 09:06:08 字數 2236 閱讀 8489

《機器學習實戰》第2章k-近鄰演算法之識別手寫數字

import numpy as np

from os import listdir #用於獲取資料夾下的檔名

#對目標元素進行分類

defclassify0

(x, dataset, labels, k)

: size = dataset.shape[0]

dis = np.sqrt(np.

sum(np.square(dataset-x)

, axis=1)

)#差值後平方、求和、開方

sort_index = np.argsort(dis)

#按照距離排序,返回的是排序後的索引

label_count =

for i in

range

(k):

label = labels[sort_index[i]

] label_count[label]

= label_count.get(label,0)

+1sort_label =

sorted

(label_count.items(

), key=

lambda d: d[1]

, reverse=

true

)#按照標籤出現次數進行排序

return sort_label[0]

[0]#將32*32的二進位制影象矩陣轉換為1*1024的向量

defdigvector

(filename)

: vect = np.zeros((1

,1024))

f =open

(filename)

for i in

range(32

):lines = f.readline(

)for j in

range(32

):vect[0,

32*i+j]

=int

(lines[j]

)return vect

defclassifydigits()

: trainlist = listdir(

'trainingdigits'

)#獲取資料夾下檔案的名稱

ntrain =

len(trainlist)

train_x = np.zeros(

(ntrain,

1024))

train_y =

for i in

range

(ntrain)

: filename = trainlist[i]

train_x[i,:]

= digvector(

'trainingdigits/%s'

%filename)

int(filename.split(

'.')[0

].split(

'_')[0

]))#解讀檔名,獲取元素的類別,如0_24.txt,表示類別為0

testlist = listdir(

'testdigits'

) ntest =

len(testlist)

error_count =

0for i in

range

(ntest)

: filename = testlist[i]

label =

int(filename.split(

'.')[0

].split(

'_')[0

])test = digvector(

'testdigits\%s'

%filename)

result = classify0(test, train_x, train_y,3)

print

('predict: %d, real: %d'

%(result, label)

)if result != label: error_count +=

1print

('the error rate: '

, error_count/

float

(ntest)

)

儲存空間開銷大

無法給出任何資料的基礎結構資訊,無法知曉平均例項樣本和典型例項樣本的特徵

機器學習實戰 KNN演算法(K近鄰)

演算法實現 演算法應用舉例 k近鄰演算法是機器學習最簡單的演算法之一,也是機器學習的初步,其主要通過大量的資料分析,判斷一組未知資料和各資料的距離,從而對一組未知資料進行相應的歸類。而所謂k最近鄰,就是k個最近的鄰居的意思,說的是每個樣本都可以用它最接近的k個鄰居來代表。所以knn演算法並不是十分完...

《機器學習實戰》 k近鄰分類演算法kNN

knn全稱為k nearest neighbors,是模式識別中比較簡單的一種演算法,可以用於分類和回歸。使用時,輸入的訓練樣本帶有標籤,輸出根據是用於分類還是回歸 分類問題的輸出為 找出k個和要 物件最近鄰的樣本,這k個樣本中,大多數 屬於哪一類即為 物件的分類標籤。回歸問題的輸出為 找出k個和回...

機器學習之 K近鄰演算法(KNN)

k近鄰演算法是機器學習中的最基礎的演算法之一,也是必須會講解的演算法之一。因為其簡單,易懂。但是k近鄰演算法在實際應用中卻很少使用到,由於其侷限性很強,執行效率低下。那麼所謂的k近鄰中的近鄰是指 已有乙個訓練資料集,現給定乙個新的資料,利用現有資料集對其進行 那麼 方法便是尋找與給定資料距離最近的k...