'''
Created on 2015-3-13
@author: lzy
'''
from numpy import *
import operator
from os import listdir
def classify0(inX,dataSet,labels,k):
dataSetSize = dataSet.shape[0]
diffMat = tile(inX, (dataSetSize,1)) - dataSet
sqDiffMat = diffMat**2
sqDistances = sqDiffMat.sum(axis=1)
distances = sqDistances**0.5
sortedDistIndicies = distances.argsort()
classCount={}
for i in range(k):
voteIlabel = labels[sortedDistIndicies[i]]
classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1
sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)
return sortedClassCount[0][0]
def image2vector(filename):
returnVect = zeros((1,1024))
fr = open(filename)
for i in range(32):
linestr = fr.readline()
for j in range(32):
returnVect[0,i*32 + j] = int(linestr[j])
return returnVect
def handwritingClassTest():
hwLabels = []
trainingFileList = listdir('trainingDigits')
m = len(trainingFileList)
trainingMat = zeros((m,1024))
for i in range(m):
filenameStr = trainingFileList[i]
fileStr = filenameStr.split('.')[0]
classNumStr = int(fileStr.split('_')[0])
hwLabels.append(classNumStr)
trainingMat[i,:] = image2vector('trainingDigits/%s' % filenameStr)
testFileList = listdir('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 = image2vector('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 "the total error rate is %f" % (errorCount / float(mTest))
handwritingClassTest()运行结果:the total error rate is 0.011628
classifiy0实现了KNN分类算法;image2vector是将图片转换为一维向量的形式,这里的图像是经过处理的32像素*32像素的黑白图像;handwritingClassTest则是训练数据、预测数据;该算法的准确率为0.011628。
numpy.tile(A,reps)是把A重复reps次来构造数组;
argsort函数返回的是数组值从小到大的索引值
from os import listdir 这段代码的主要功能是从os模块中导入函数listdir,它可以列出给定目录的文件名。
1272

被折叠的 条评论
为什么被折叠?



