機器學習實戰2 2KNN識別手寫數字

2021-10-12 03:15:04 字數 2302 閱讀 8220

from numpy import

*from os import listdir

import knn

"""將32*32的二進位制影象矩陣轉換為1*1024的向量

"""def

img2vector

(filename)

: returnvect = zeros((1

,1024))

fr =

open

(filename)

for i in

range(32

):linestr = fr.readline(

)for j in

range(32

):returnvect[0,

32*i+j]

=int

(linestr[j]

)return returnvect

testvector = img2vector(

'digits/testdigits/0_13.txt'

)# 檔案存放在專案中的路徑

#print(testvector[0,0:124])

# 使用k-近鄰演算法識別手寫數字

defhandwritingclasstest()

: hwlables =

trainingfilelist = listdir(

'digits/trainingdigits'

)# 返回指定路徑下的檔案和資料夾列表

m =len(trainingfilelist)

trainingmat = zeros(

(m,1024))

for i in

range

(m):

filenamestr = trainingfilelist[i]

filestr = filenamestr.split(

'.')[0

]# 通過指定的分隔符:,對字串進行切片。引數num表示返回num+1個引數列表。take off .txt

classnumstr =

int(filestr.split(

'_')[0

])# 得到二進位制影象對應的數字

# 得到訓練集標籤

trainingmat[i,:]

= img2vector(

'digits/trainingdigits/%s'

%filenamestr)

# 該路徑下依次向被調函式傳遞

testfilelist = listdir(

'digits/testdigits'

) errorcount =

0.0 mtest =

len(testfilelist)

for i in

range

(mtest)

: filenamestr = testfilelist[i]

filestr = filenamestr.split(

'.')[0

] classnumstr =

int(filenamestr.split(

'_')[0

])vectorundertest = img2vector(

'digits/testdigits/%s'

%filenamestr)

# 單個測試向量,1*1024

classifierreuslt = knn.classify0(vectorundertest,trainingmat,hwlables,3)

# 得到分類器給出的訓練結果,即標籤

機器學習實戰 knn 手寫識別

這個是 機器學習實戰 的第二個例項,用knn演算法實現手寫識別,識別0 9這幾個數字 要實現手寫識別功能,首先將影象資料轉換為矩陣或者向量形式,本例使用32 32的二值影象,轉化成1 1024的陣列,具體 如下 def img2vector filename returnvect zeros 1,1...

機器學習 KNN演算法 手寫識別

1.1 簡介 knn演算法即k最近鄰分類演算法,是機器學習的一種。從訓練樣本集中選取k個與測試樣本 距離 最近的樣本,這k個樣本中出現頻率最高的類別作為該測試樣本的類別。1.2 要求 目標 分類未知類別的案例。輸入 待分類未知類別案例專案 測試集 已知類別案例集合d 訓練集 輸出 未知類別案例的可能...

手寫數字識別 實戰 KNN演算法識別手寫數字

鄰近演算法,或者說k最近鄰 knn,k nearestneighbor 分類演算法是資料探勘分類技術中最簡單的方法之一。所謂k最近鄰,就是k個最近的鄰居的意思,說的是每個樣本都可以用它最接近的k個鄰居來代表。下面是我學習knn演算法的思維導圖 其中距離的定義,各個距離的公式為 歐氏距離 n維空間的距...