(github:
識別手寫的數字0-9,其中畫素大小為32*32,原始碼中將畫素值用文字格式儲存了。
例如:
源**中目錄trainingdigits中包含2000個例子,testdigits中包含大約900個例子,兩組資料沒有覆蓋。
首先我們要講32*32的二進位制影象矩陣轉換成1*1024的向量。首先編寫一段函式img2vector,開啟給定的檔案,迴圈讀出檔案的前32行,並將每行的頭32個字元值儲存在陣列中。
#然後編寫handwritingclasstest()函式用來測試分類器的**測試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])
def執行handwritingclasstest()得到執行的結果: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)))
錯誤率大概為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...