资源简介
KNN手写识别代码及样本集,样本集来自
代码片段和文件信息
# -*- coding: utf-8 -*-
‘‘‘
Created on Sep 16 2010
kNN: k Nearest Neighbors
Input: inX: vector to compare to existing dataset (1xN)
dataSet: size m data set of known vectors (NxM)
labels: data set labels (1xM vector)
k: number of neighbors to use for comparison (should be an odd number)
Output: the most popular class label
@author: pbharrin
‘‘‘
from numpy import *
import operator
from os import listdir
def classify0(inX dataSet labels k):
#采用KNN判断类别
dataSetSize = dataSet.shape[0]#计算训练样本样本数
diffMat = tile(inX (dataSetSize1)) - dataSet
sqDiffMat = diffMat**2
sqDistances = sqDiffMat.sum(axis=1)
distances = sqDistances**0.5#以上4行计算距离
sortedDistIndicies = distances.argsort()#对距离计算结果进行排序,默认为升序
classCount={}
for i in range(k):#计算最近K个距离所属类别
voteIlabel = labels[sortedDistIndicies[i]]
classCount[voteIlabel] = classCount.get(voteIlabel0) + 1
sortedClassCount = sorted(classCount.iteritems() key=operator.itemgetter(1) reverse=True)#得到最后的类别
return sortedClassCount[0][0]
def img2vector(filename):
#从text文本中读取数据
returnVect = zeros((11024))
fr = open(filename)
for i in range(32):
lineStr = fr.readline()
for j in range(32):
returnVect[032*i+j] = int(lineStr[j])
return returnVect
def handwritingClassTest():
hwLabels = []
trainingFileList = listdir(‘trainingDigits‘) #加载训练集
m = len(trainingFileList)
trainingMat = zeros((m1024))
for i in range(m):
fileNameStr = trainingFileList[i]
fileStr = fileNameStr.split(‘.‘)[0] #去掉.txt后缀名
classNumStr = int(fileStr.split(‘_‘)[0])#获取其所属类别
hwLabels.append(classNumStr)
trainingMat[i:] = img2vector(‘trainingDigits/%s‘ % fileNameStr)
testFileList = listdir(‘testDigits‘) #加载测试集
errorCount = 0.0
mTest = len(testFileList)
for i in range(mTest):
fileNameStr = testFileList[i]
fileStr = fileNameStr.split(‘.‘)[0] #去掉.txt后缀名
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))#计算错误率
handwritingClassTest()
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2016-10-26 21:50 第一章_KNN\
文件 2834 2016-10-26 20:24 第一章_KNN\kNN.py
文件 3840 2016-10-26 21:48 第一章_KNN\KNN_digits.m
目录 0 2016-10-26 21:39 第一章_KNN\testDigits\
文件 1088 2010-10-07 21:35 第一章_KNN\testDigits\0_0.txt
文件 1088 2010-10-07 21:35 第一章_KNN\testDigits\0_1.txt
文件 1088 2010-10-07 21:35 第一章_KNN\testDigits\0_10.txt
文件 1088 2010-10-07 21:35 第一章_KNN\testDigits\0_11.txt
文件 1088 2010-10-07 21:35 第一章_KNN\testDigits\0_12.txt
文件 1088 2010-10-07 21:35 第一章_KNN\testDigits\0_13.txt
文件 1088 2010-10-07 21:35 第一章_KNN\testDigits\0_14.txt
文件 1088 2010-10-07 21:35 第一章_KNN\testDigits\0_15.txt
文件 1088 2010-10-07 21:35 第一章_KNN\testDigits\0_16.txt
文件 1088 2010-10-07 21:35 第一章_KNN\testDigits\0_17.txt
文件 1088 2010-10-07 21:35 第一章_KNN\testDigits\0_18.txt
文件 1088 2010-10-07 21:35 第一章_KNN\testDigits\0_19.txt
文件 1088 2010-10-07 21:35 第一章_KNN\testDigits\0_2.txt
文件 1088 2010-10-07 21:35 第一章_KNN\testDigits\0_20.txt
文件 1088 2010-10-07 21:35 第一章_KNN\testDigits\0_21.txt
文件 1088 2010-10-07 21:35 第一章_KNN\testDigits\0_22.txt
文件 1088 2010-10-07 21:35 第一章_KNN\testDigits\0_23.txt
文件 1088 2010-10-07 21:35 第一章_KNN\testDigits\0_24.txt
文件 1088 2010-10-07 21:35 第一章_KNN\testDigits\0_25.txt
文件 1088 2010-10-07 21:35 第一章_KNN\testDigits\0_26.txt
文件 1088 2010-10-07 21:35 第一章_KNN\testDigits\0_27.txt
文件 1088 2010-10-07 21:35 第一章_KNN\testDigits\0_28.txt
文件 1088 2010-10-07 21:35 第一章_KNN\testDigits\0_29.txt
文件 1088 2010-10-07 21:35 第一章_KNN\testDigits\0_3.txt
文件 1088 2010-10-07 21:35 第一章_KNN\testDigits\0_30.txt
文件 1088 2010-10-07 21:35 第一章_KNN\testDigits\0_31.txt
文件 1088 2010-10-07 21:35 第一章_KNN\testDigits\0_32.txt
............此处省略2854个文件信息
- 上一篇:十天学会单片机100
- 下一篇:基于Qt的实时曲线绘制
评论
共有 条评论