defdatingClassTest():
hoRatio = 0.50#hold out 10%
datingDataMat,datingLabels = file2matrix('D:\\yls\\learn\\machinelearninginaction\\Ch02\\datingTestSet2.txt') #load data setfrom file
normMat, ranges, minVals = autoNorm(datingDataMat)
m = normMat.shape[0]
# 计算向量的数量选择其中的一部分做为测试数据
numTestVecs = int(m*hoRatio)
errorCount = 0.0for i in range(numTestVecs):
# k = normMat[numTestVecs:m,:]# z = datingLabels[numTestVecs:m]# 第一个参数是normMat矩阵的第i个行向量,# 第二个参数是此normMat矩阵[numTestVecs, m]左闭右开区间的的所有行组成的矩阵# 第三个参数是标签行向量datingLabels的[numTestVecs, m]左闭右开区间的的所有元素组成的新的行向量
classifierResult = classify0(normMat[i,:],normMat[numTestVecs:m,:],datingLabels[numTestVecs:m],3)
#classifierResult 是特征分类器得出的矩阵中中距离 normMat[i,:] 最近的特征值print"the classifier came back with: %d, the real answer is: %d" % (classifierResult, datingLabels[i])
if (classifierResult != datingLabels[i]): errorCount += 1.0print"the total error rate is: %f" % (errorCount/float(numTestVecs))
print errorCount
2-6 手写数字识别系统的测试代码
defhandwritingClassTest():
hwLabels = []
# load the training set,trainingDigits目录中的文件内容存储在列表中
trainingFileList = listdir('D:\\yls\\learn\\machinelearninginaction\\Ch02\\digits\\trainingDigits')
#返回序列或集合的项数1934 。
m = len(trainingFileList)
trainingMat = zeros((m,1024))
for i in range(m):
fileNameStr = trainingFileList[i]
# take off .txt 从文件名解析出 文件内的数字
fileStr = fileNameStr.split('.')[0]
classNumStr = int(fileStr.split('_')[0])
# 把每个文件名对应的图件数字做为特征值
hwLabels.append(classNumStr)
#我们将把一个32×32的二进制图像矩阵转换为1×1024的向量, 由m个[1,1024]向量(即图像) 组成一个 训练 矩阵
trainingMat[i,:] = img2vector('D:\\yls\\learn\\machinelearninginaction\\Ch02\\digits\\trainingDigits\\%s' % fileNameStr)
# 读取待测试目录下的文件,并存储在列表中testFileList
testFileList = listdir('D:\\yls\\learn\\machinelearninginaction\\Ch02\\digits\\testDigits') #iterate through the test set
errorCount = 0.0
mTest = len(testFileList)
for i in range(mTest):
fileNameStr = testFileList[i]
fileStr = fileNameStr.split('.')[0] #take off .txt
classNumStr = int(fileStr.split('_')[0])
# 待测试目录下的文件
vectorUnderTest = img2vector('D:\\yls\\learn\\machinelearninginaction\\Ch02\\digits\\testDigits\\%s' % fileNameStr)
# 使用classify0测试每个文件,,
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.0print ("\nthe total number of errors is: %d" % errorCount)
print ("\nthe total error rate is: %f" % (errorCount/float(mTest)))