機器學習python實戰(zhàn)之手寫數(shù)字識別
看了上一篇內容之后,相信對K近鄰算法有了一個清晰的認識,今天的內容——手寫數(shù)字識別是對上一篇內容的延續(xù),這里也是為了自己能更熟練的掌握k-NN算法。
我們有大約2000個訓練樣本和1000個左右測試樣本,訓練樣本所在的文件夾是trainingDigits,測試樣本所在的文件夾是testDigits。文本文件中是0~9的數(shù)字,但是是用二值圖表示出來的,如圖。我們要做的就是使用訓練樣本訓練模型,并用測試樣本來檢測模型的性能。
首先,我們需要將文本文件中的內容轉化為向量,因為圖片大小是32*32,所以我們可以將其轉化為1*1024的向量。具體代碼實現(xiàn)如下:
def img2vector(filename): imgVec = zeros((1,1024)) file = open(filename) for i in range(32): lines = file.readline() for j in range(32): imgVec[0,32*i+j] = lines[j] return imgVec
實現(xiàn)了圖片到向量的轉化之后,我們就可以對測試文件中的內容進行識別了。這里的識別我們可以使用上一篇中的自定義函數(shù)classify0,這個函數(shù)的第一個參數(shù)是測試向量,第二個參數(shù)是訓練數(shù)據(jù)集,第三個參數(shù)是訓練集的標簽。所以,我們首先需要將訓練數(shù)據(jù)集轉化為(1934*1024)的矩陣,1934這里是訓練集的組數(shù)即trainingDigits目錄下的文件數(shù),其對應的標簽轉化為(1*1934)的向量。之后要編寫的代碼就是對測試數(shù)據(jù)集中的每個文本文件進行識別,也就是需要將每個文件都轉化成一個(1*1024)的向量,再傳入classify0函數(shù)的第一個形參。整體代碼如下:
def handWriteNumClassTest(): NumLabels = [] TrainingDirfile = listdir(r'D:\ipython\num_recognize\trainingDigits')#文件目錄 L = len(TrainingDirfile) #該目錄中有多少文件 TrainMat = zeros((L,1024)) for i in range(L): file_n = TrainingDirfile[i] fileName = file_n.split('.')[0] ClassName = int(file_n.split('_')[0]) NumLabels.append(ClassName) TrainMat[i,:] = img2vector(r'D:\ipython\num_recognize\trainingDigits\%s'%file_n) TestfileDir = listdir(r'D:\ipython\num_recognize\testDigits') error_cnt = 0.0 M = len(TestfileDir) for j in range(M): Testfile = TestfileDir[j] TestfileName = Testfile.split('.')[0] TestClassName = int(Testfile.split('_')[0]) TestVector = img2vector(r'D:\ipython\num_recognize\testDigits\%s'%Testfile) result = classify0(TestVector,TrainMat,NumLabels,3) print('the result is %d,the real answer is %d\n'%(result,TestClassName)) if result!=TestClassName: error_cnt+=1 print('the total num of errors is %f\n'%error_cnt) print('the error rate is %f\n'%(error_cnt/float(M)))
這里需要首先導入listdir方法,from os import listdir,它可以列出給定目錄的文件名。對于測試的每個文件,如果識別的分類結果跟真實結果不一樣,則錯誤數(shù)+1,最終用錯誤數(shù)/測試總數(shù) 來表示該模型的性能。下面給出結果
這里測試的總共946個項目中,一共有10個出現(xiàn)了錯誤,出錯率為1%,這個性能還是可以接受的。有了上一篇內容的理解,這篇就簡單多了吧!
訓練數(shù)據(jù)集和測試集文件下載
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
解決PyCharm IDE環(huán)境下,執(zhí)行unittest不生成測試報告的問題
這篇文章主要介紹了解決PyCharm IDE環(huán)境下,執(zhí)行unittest不生成測試報告的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09python json load json 數(shù)據(jù)后出現(xiàn)亂序的解決方案
今天小編就為大家分享一篇python json load json 數(shù)據(jù)后出現(xiàn)亂序的解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02spark dataframe 將一列展開,把該列所有值都變成新列的方法
今天小編就為大家分享一篇spark dataframe 將一列展開,把該列所有值都變成新列的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01Pandas數(shù)值排序 sort_values()的使用
本文主要介紹了Pandas數(shù)值排序 sort_values()的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-07-07python基礎知識之try...except...的詳細用法實例
在各種編程語言進行工作和學習的過程中,都會有一些錯誤異常,下面這篇文章主要給大家介紹了關于python基礎知識之try...except...的詳細用法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-08-08用python按照圖像灰度值統(tǒng)計并篩選圖片的操作(PIL,shutil,os)
這篇文章主要介紹了用python按照圖像灰度值統(tǒng)計并篩選圖片的操作(PIL,shutil,os),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06