kNNアルゴリズム及び実例(二)
3398 ワード
前のブログではKNNアルゴリズムを紹介しています.一次元データでの分類方法を紹介しています.http://blog.csdn.net/congqi4525/article/details/71374484. 本ブログでは、二次元データの分類方法(機械学習の実戦での手書き識別システムの例)を詳しく紹介します.アルゴリズムデータには、2つの部分があります.tringDigitsとtestDigitsは、前のブログの分類アルゴリズムを使用するために、画像の2次元データを1次元データアルゴリズムコードに変換する必要があります.
from numpy import *
from kNN import classify0
import os
def img2vector(filename): #
retVec=zeros((1,1024))
fr=open(filename)
for i in range(32):
lineStr=fr.readline()
for j in range(32):
retVec[0,32*i+j]=int(lineStr[j])
return retVec
def handclassTest():
hwLabels=[]
trainFileList=os.listdir('data/trainingDigits')
m=len(trainFileList)
trainingMat=zeros((m,1024))
for i in range(m): #
fileNameStr=trainFileList[i]
fileStr=fileNameStr.split('.')[0]
classNumStr=int(fileStr.split('_')[0])
hwLabels.append(classNumStr)
trainingMat[i,:]=img2vector("data/trainingDigits/%s"%fileNameStr)
testFileList=os.listdir('data/testDigits')
mTest=len(testFileList)
errorCount=0.0
for i in range(mTest): # ,
fileNameStr=testFileList[i]
fileStr=fileNameStr.split('.')[0]
classNumStr=int(fileStr.split('_')[0])
vectorUnderTest=img2vector("data/testDigits/%s"%fileNameStr)
classresult=classify0(vectorUnderTest,trainingMat,hwLabels,3)
print("came back:%d real:%d"%(classresult,classNumStr))
if(classresult!=classNumStr):
errorCount+=1.0
print("errorCount:%d %f"%(errorCount,errorCount/float(mTest)))
handclassTest()