机器学习实战——手写数字识别
来源:互联网 发布:c4d下载mac 斯蒂芬周 编辑:程序博客网 时间:2024/05/16 16:14
前面探索了KNN的代码,KNN中唯一需要优化的参数就是K,前面还没涉及到训练K值使得获得的准确率最高,思想还是比较简单的,书上还附加了关于利用KNN进行手写数字识别的算法,主要思想是先将32*32的图片文件(图片本身用01序列构成的矩阵表示,TXT文档)转化为1*1024的向量,再使用K近邻的思想,利用前面已经写好的部分代码(classify0())进行计算,下面是具体的代码。
def img2vector(filename): #img2vecor将32*32的图片转化为向量
returnVect = zeros((1,1024)) #返回一个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]) #这个向量本身也完全是由01构成,相当于将原来的矩阵每一行首尾相连
return returnVect
def handwritingClassTest():
hwLabels = []
trainingFileList = listdir('trainingDigits') #load the training set,‘trainingDigits’是一个文件夹,包含若干个txt文件
m = len(trainingFileList) #得到“trainingDigits”目录下文件的个数
trainingMat = zeros((m,1024)) #将所有训练数据用一个m行,1024列的矩阵表示
for i in range(m):
fileNameStr = trainingFileList[i] #获得所有文件名,文件名格式‘x_y.txt’,x表示这个手写数字实际表示的数字(label)
fileStr = fileNameStr.split('.')[0] #take off .txt
classNumStr = int(fileStr.split('_')[0]) #用‘_’分割,取得label
hwLabels.append(classNumStr) #将所有标签都存进hwLables[]
trainingMat[i,:] = img2vector('trainingDigits/%s' % fileNameStr) #将文件转化为向量后存入trainingMat[],这里展现了灵活的文件操作
testFileList = listdir('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('testDigits/%s' % fileNameStr) #这部分针对测试集的预处理和前面基本相同
classifierResult = classify0(vectorUnderTest, trainingMat, hwLabels, 3) #调用了前面写的classify0()函数
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))
listdir() :获得指定目录中的内容
fileNameStr = trainingFileList[i] #获得所有文件名,文件名格式‘x_y.txt’,x表示这个手写数字实际表示的数字(label)
fileStr = fileNameStr.split('.')[0] #take off .txt
classNumStr = int(fileStr.split('_')[0]) #用‘_’分割,取得label
这里展现了灵活的文件操作,特别是对同一个文件夹下面有命名规律的文件的操作,作为初学者,以前没接触过,学习了
在默认参数下,错误率在 0.011628
第二章KNN算法的内容到此结束,作为入门小白,通过看代码收获还是很大的,这几天自己还要把这些代码自己重新写一遍,把基本操作掌握好,特别是文件操作还有矩阵,列表的计算,在原理上KNN是十分简单的,但是这个自己动手编程实战的过程不能省略。以前原理性的东西看的比较多,动手实战比较少,现在要好好弥补了!
- 机器学习实战——手写数字识别
- 机器学习xgboost实战—手写数字识别
- 机器学习xgboost实战—手写数字识别
- 机器学习xgboost实战—手写数字识别 (DMatrix)
- 机器学习实战——使用K-近邻算法识别手写数字
- 机器学习-实战-入门-MNIST手写数字识别
- 机器学习-tensorflow入门教程二——识别手写数字
- 学习笔记——《机器学习实战》KNN算法实现 约会网站测试,手写数字识别,代码,注释,错误修改
- TensorFlow实战—mnist手写数字识别
- 《机器学习实战二》K近邻学习之手写数字识别及检测识别错误率
- 机器学习实战kNN之手写识别
- 机器学习实战kNN之手写识别
- 机器学习实战kNN之手写识别
- 机器学习实战-knn_手写识别
- 【机器学习实战02】手写识别系统
- 机器学习--knn手写数字识别系统
- 【机器学习 sklearn】手写数字识别 SVM
- 【《机器学习实战》第2章读书笔记】手写数字识别系统剖析
- 初识Android中的IPC机制(1)————使用Messenger
- 03动态规划-04coins-in-a-line
- GANs系列
- 数据结构:maze迷宫求解(C++)
- 简单的spring创建
- 机器学习实战——手写数字识别
- Android ViewPager图片滑动
- Android contacts 联系人 通讯录 源码 完全解析
- B 文件上传
- A股-进阶-1分钟get的选股八大技巧
- 内存访问地址段错误
- MySQL-Department Highest Salary
- Struts2、Spring和Hibernate三大框架整合
- 数据压缩 彩色空间转换