機器學習實戰 knn 手寫識別

2021-06-22 04:43:16 字數 2652 閱讀 9205

這個是《機器學習實戰》的第二個例項,用knn演算法實現手寫識別,識別0-9這幾個數字;

要實現手寫識別功能,

首先將影象資料轉換為矩陣或者向量形式,本例使用32*32的二值影象,轉化成1*1024的陣列,具體**如下:

def img2vector(filename):

returnvect = zeros((1,1024)) #建立乙個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

要插入中文注釋,還需要在python指令碼檔案中的第一行或者第二行新增

#coding:gbk 或

#coding:utf-8 或

##-*- coding : gbk -*-

然後我們將資料輸入到分類器中,檢查效果

def handwritingclasstest():

hwlabels = #建立空陣列,儲存手寫標籤

trainingfilelist = listdir('trainingdigits') #trainingdigits目錄中的檔案內容儲存在列表中

m = len(trainingfilelist) #得到列表中的檔案數

trainingmat = zeros((m,1024)) #建立m*1024的訓練矩陣,每行儲存乙個圖形資訊

for i in range(m):

filenamestr = trainingfilelist[i]

filestr = filenamestr.split('.')[0] #得到檔名

classnumstr = int(filestr.split('_')[0])#得到標籤

trainingmat[i,:] = img2vector('trainingdigits/%s' % filenamestr) #載入影象資訊

testfilelist = listdir('testdigits') #testdigits目錄中的檔案內容儲存在列表中

errorcount = 0.0

mtest = len(testfilelist) #得到測試列表中的檔案數

for i in range(mtest):

filenamestr = testfilelist[i]

filestr = filenamestr.split('.')[0]

classnumstr = int(filestr.split('_')[0])

vectorundertest = img2vector('testdigits/%s' % filenamestr)

classifierresult = classify0(vectorundertest, trainingmat, hwlabels, 3)

print "the classifier came back with: %d, the real answer is: %d" % (classifierresult, classnumstr)

if (classifierresult != classnumstr): errorcount += 1.0

print "\nthe total number of errors is: %d" % errorcount #錯誤數

print "\nthe total error rate is: %f" % (errorcount/float(mtest)) #總的錯誤率

順便討論下split函式的用法,

按某一字元分割

按某一字元分割n次,當n大於實際的分割數時,返回最大的分割狀態,n=2,效果和n=3、4、5、、n等等是一樣的

str_split = str.split('.',2)
n=1時,

str_split = str.split('.',1)
['www', 'baidu.com']
還可以賦值給變數

print str_split1結果如下

split字元分割用法參照 h t t p:

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

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...

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

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

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

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