KNN演算法應用(二)手寫數字識別

2021-09-24 17:07:06 字數 2186 閱讀 4833

(github:

識別手寫的數字0-9,其中畫素大小為32*32,原始碼中將畫素值用文字格式儲存了。

例如:

源**中目錄trainingdigits中包含2000個例子,testdigits中包含大約900個例子,兩組資料沒有覆蓋。

首先我們要講32*32的二進位制影象矩陣轉換成1*1024的向量。首先編寫一段函式img2vector,開啟給定的檔案,迴圈讀出檔案的前32行,並將每行的頭32個字元值儲存在陣列中。

#

測試0-1影象識別實現**

defimg2vector(filename):

returnvec = np.zeros((1,1024))

fr =open(filename)

for i in range(32):

linestr =fr.readline()

for j in range(32):

returnvec[0,32*i+j]=int(linestr[j])

return

returnvec

#testvector = img2vector('testdigits/0_13.txt')

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

然後編寫handwritingclasstest()函式用來測試分類器的**

def

handwritingclasstest():

hwlabels =

trainingfilelist = os.listdir('

trainingdigits')

m =len(trainingfilelist)

trainingmat = np.zeros((m,1024))

for i in

range(m):

filename =trainingfilelist[i]

filestr = filename.split('.'

)[0]

classnum = int(filestr.split('_'

)[0])

trainingmat[i,:] = img2vector('

trainingdigits\%s

'%(filename))

testfilelist = os.listdir('

testdigits')

errorcount = 0.0mtest =len(testfilelist)

for i in

range(mtest):

filenames =testfilelist[i]

filestr = filenames.split('.'

)[0]

testnum = int(filestr.split('_'

)[0])

testvector = img2vector('

testdigits\%s

'%(filenames))

classiferresult = classify0(testvector,trainingmat,hwlabels,3)

print ("

the true num is %d,the classifer num is %d

"%(testnum,classiferresult))

if(classiferresult !=testnum):

errorcount +=1.0

print ("

\n the total number of errors is :%d

"%(errorcount))

print ("

\nthe total error rate is:%f

"%(errorcount/float(mtest)))

執行handwritingclasstest()得到執行的結果:

錯誤率大概為1.05%(其中分類演算法,檔案讀取函式已在上一節中實現了)

posted on

2017-09-21 16:27

...)

編輯收藏

手寫數字識別 KNN演算法的應用

訓練之後,即可識別手寫數字如下 我用windows自帶的畫板畫的,可能有點醜,見諒 等等執行在自己安裝好jupyter的伺服器上,安裝可以參考 在centos上安裝jupyter notebook 支援外網訪問 一定要保證路徑正確,如果不希望做任何修改的話,請保證相對路徑如下 此python檔案 如...

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

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

KNN演算法識別手寫數字

前言 從現在開始博主要開始學習機器學習了,歡迎有共同興趣的人一起學習。廢話不多說了,開始上 一 將資料集csv檔案匯入到python中,並將csv格式轉為list格式 def dataset 讀取訓練集檔案路徑 path trains1.csv os.path.abspath machinelear...