KNN算法--手写输入判断(Python3)
2017-10-21 18:13
417 查看
可能对于有些人在以前看过这个例子,但是很不巧的是Python3和Python2的之间的一些差异,导致了照搬原来的那份是不能用了。
这里,我根据自己的情况和进行了改写
要数据集的话,可以给我私信,或者是在评论去留言。我看到就会回复
记得用的时候,改写下那个文件名,看你自己是把数据放到哪了,就写哪。
这里,我根据自己的情况和进行了改写
要数据集的话,可以给我私信,或者是在评论去留言。我看到就会回复
记得用的时候,改写下那个文件名,看你自己是把数据放到哪了,就写哪。
from numpy import * import os import operator def classify0(inX, dataSet, labels, k): # k means how many you need to get your P(x) dataSetSize = dataSet.shape[0] DiffMat = tile(inX, (dataSetSize, 1)) - dataSet sqDiffMat = DiffMat**2 sqDistances = sqDiffMat.sum(axis=1) distances = sqDistances**0.5 # 到这里求解了欧式距离(并构成了一个array) sortedDistances = distances.argsort() classCount = {} for i in range(k): voteIlabel = labels[sortedDistances[i]] classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1 # 选出了距离最小的k个点,并且做了一个简单的统计 sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1), reverse=True) # 按照第一个(从0开始数)进行排序 return sortedClassCount[0][0] # 返回的出现次数最多的那个标签 # 将32*32图片转换成向量(实际生活中,往往都会有更大的尺寸) def img2vector(filename): returnVect = zeros((1, 1024)) # 将32 *32 的矩阵转换成一个 1*1024的向量 fr = open(filename) for i in range(32): lineStr = fr.readline() for j in range(32): returnVect[0, 32 * i + j] = int(lineStr[j]) return returnVect def handwritingClassTest(): hwLabels = [] trainingFileList = os.listdir('E:/Code/Python/test/KNN算法/digits/trainingDigits') # 得到文件列表 m = len(trainingFileList) # 得到文件夹列表长度 traingMat = zeros((m, 1024)) # 训练集合 for i in range(m): fileNameStr = trainingFileList[i] fileStr = fileNameStr.split('.')[0] # 得到了文件名(去掉了后缀) classNumStr = int(fileStr.split('_')[0]) # 要注意到数据集格式 得到了分类数字 hwLabels.append(classNumStr) traingMat[i, :] = img2vector('E:/Code/Python/test/KNN算法/digits/trainingDigits/%s' % fileNameStr) # 上面得到了数据集 testFileList = os.listdir('E:/Code/Python/test/KNN算法/digits/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 = img2vector('E:/Code/Python/test/KNN算法/digits/testDigits/%s' % fileNameStr) classifyResult = classify0(vectorUnderTest, traingMat, hwLabels, 3) # print("the predicted number is %d, and the real number is %d" % (classifyResult, classNumStr)) if classifyResult != classNumStr: errorCount += 1.0 print("The error times is %d" % errorCount) print("The error rate is %.3f" % (errorCount / float(mTest))) if __name__ == "__main__": handwritingClassTest()
相关文章推荐
- Python实现knn算法手写数字识别
- KNN近邻算法(python3)识别手写数字
- 【python】机器学习实战KNN算法之手写数字识别
- Python实现KNN算法手写识别数字
- 【机器学习算法实现】kNN算法__手写识别——基于Python和NumPy函数库
- 【机器学习算法实现】kNN算法__手写识别——基于Python和NumPy函数库
- kNN算法__手写识别——基于Python和NumPy函数库
- (1)kNN算法_手写识别实例——基于Python和NumPy函数库
- KNN算法 手写识别 python
- 使用KNN算法在python下识别手写数字(带注释)
- 【机器学习算法实现】kNN算法__手写识别——基于Python和NumPy函数库
- python判断输入日期为第几天
- 判断Python输入是否为数字
- 从零开始:用Python实现KNN算法
- python实现识别手写数字 python图像识别算法
- OpenCV3的kNN算法进行OCR识别-使用Python
- KNN算法实战——手写数字识别
- KNN算法的Python实现
- 算法_已知五个>=0的自然数,随机输入5个数,编写算法判断是否能排列成有序的数字。0可以替换成任何数
- 基于qt和opencv3实现机器学习之:利用最近邻算法(knn)实现手写数字分类