机器学习-手写数字识别系统
需要两个数据包,里边有许多数字图像,像这样:
数据包
import numpy as np
import operator
from os import listdir"""分类函数"""
def classfy0(inX, dataSet, labels, k): # 参数分别为测试样本,训练样本,训练样本标签,近邻个数dataSetSize = dataSet.shape[0] # 返回行列数,0为行,列为1diffMat = np.tile(inX, (dataSetSize, 1)) - dataSet # tile是按照某个方向复制元素,行方向复制四行,列方向复制一行,然后减去每个训练样本值sqDiffMat = diffMat ** 2 # 乘方运算sqDistances = sqDiffMat.sum(axis=1) # 轴为1的方向(横向)求和distances = sqDistances ** 0.5 # 乘方运算,等同于开根号sortedDistIndicies = distances.argsort() # 返回从小到大排序的索引值(原数组不动)classCount = {} # 字典(键值对)for i in range(k): # for-each循环,统计前k个每个分类有多少个voteIlabel = labels[sortedDistIndicies[i]] # 记录每个的标签classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1 # 取出该标签的值+1(原先没有默认为0)sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1),reverse=True) # operator.itemgetter(1)表示用键值对中的值排序,为0表示用键排序,一开始升序,reverse=True后降序return sortedClassCount[0][0] # 返回第一个标签"""32*32矩阵->1*1024矩阵"""
def imgVector(filename):returnVect = np.zeros((1, 1024)) # 创建1*1024矩阵,用0填充fr = open(filename) # 打开文件for i in range(32):lineStr = fr.readline() # 按行读取for j in range(32):returnVect[0, 32 * i + j] = int(lineStr[j]) # 每一行的32个元素依次添加到1*1024的矩阵中return returnVect"""处理文件"""
def handwritingClassTest():hwLabels = [] # 测试机标签trainingFileList = listdir('trainingDigits') # 返回trainingDigits目录下的文件名,如:0_0.txtm = len(trainingFileList) # 求文件名个数trainingMat = np.zeros((m, 1024)) # 因为每个文件都对应一个1*1024的矩阵,所以创建一个m*1024的矩阵for i in range(m):fileNameStr = trainingFileList[i] # 依次取每一个文件名字fileStr = fileNameStr.split('.')[0] # 以原点分开,并且取前边的(去掉后缀)如:0_0classNumStr = int(fileStr.split('_')[0]) # 获得文件名字前边的数字,如:0hwLabels.append(classNumStr) # 将数字添加到标签数组trainingMat[i, :] = imgVector('trainingDigits/%s' % fileNameStr) # 将每一个文件转换成1*1024的矩阵testFileList = listdir('testDigits') # 返回testFileList目录下的文件名,如:0_0.txterrorCount = 0.0mTest = len(testFileList) # 测试文件数for i in range(mTest):fileNameStr = testFileList[i]fileStr = fileNameStr.split('.')[0]classNumStr = int(fileStr.split('_')[0])vectorUnderTest = imgVector('testDigits/%s' % fileNameStr) # 取每一个文件的1*1024矩阵classifierResult = classfy0(vectorUnderTest, trainingMat, hwLabels, 3) # 进行分类print("the classifier came back with:%s,the real answer is:%s" % (classifierResult, classNumStr))if (classifierResult != classNumStr):errorCount += 1.0print("\nthe total number of errors is:%f" % errorCount)print("\nthe total error rate is:%f%%" % (errorCount / float(mTest)))if __name__ == '__main__':handwritingClassTest()
机器学习-手写数字识别系统相关推荐
- 课程设计(毕业设计)—基于机器学习KNN算法手写数字识别系统—计算机专业课程设计(毕业设计)
机器学习KNN算法手写数字识别系统 下载本文手写数字识别系统完整的代码和课设报告的链接(或者可以联系博主koukou(壹壹23七2五六98),获取源码和报告):https://download.csd ...
- 【机器学习/人工智能】 大作业:手写数字识别系统
写在前面 参考的是https://zh.d2l.ai/index.html 一.大作业设计目的与要求 (1)利用所学习的聚类算法完成简单的图像分割系统. (2)编程并利用相关软件完成大作业测试,得到实 ...
- Python(TensorFlow框架)实现手写数字识别系统
手写数字识别算法的设计与实现 本文使用python基于TensorFlow设计手写数字识别算法,并编程实现GUI界面,构建手写数字识别系统.这是本人的本科毕业论文课题,当然,这个也是机器学习的基本问题 ...
- Python TensorFlow框架 实现手写数字识别系统
手写数字识别算法的设计与实现 本文使用python基于TensorFlow设计手写数字识别算法,并编程实现GUI界面,构建手写数字识别系统.这是本人的本科毕业论文课题,当然,这个也是机器学习的基本问题 ...
- 手写数字识别系统学习(1)
手写数字识别系统学习(1) 从这一章起,我们将通过手写数字识别这一非常经典的机器学习项目接着来学习神经网络 一.数据数据和测试数据 我们在上一章提到了权重和偏置的概念,这是一个相当繁琐的数据集,我 ...
- k-近邻算法实现手写数字识别系统
k-近邻算法实现手写数字识别系统 一.实验介绍 1.1 实验内容 本实验将会从电影题材分类的例子入手,详细讲述k-近邻算法的原理.在这之后,我们将会使用该算法实现手写数字识别系统. 1.2 课程来源 ...
- 手写数字识别系统 基于python
环境基于Python3.6和Tensorflow框架 实现手写数字识别系统 本文使用python基于TensorFlow设计手写数字识别算法,并编程实现GUI界面,构建手写数字识别系统.文中首先对如何 ...
- MATLAB实现数字识别系统,基于人工神经网络的MATLAB手写数字识别系统
<基于人工神经网络的MATLAB手写数字识别系统>由会员分享,可在线阅读,更多相关<基于人工神经网络的MATLAB手写数字识别系统(8页珍藏版)>请在人人文库网上搜索. 1.基 ...
- 手写数字识别系统(python+K-近邻完整代码)
手写数字图片识别系统的介绍: 由于数字图片是一个 32*32 维的二进制向量,不能直接放到模型中使用,所以: 首先需要先将每一个 3232 维的向量转化为 1(3232)维的向量,即 11024 维数 ...
最新文章
- Qt Installer Framework实战
- Science重磅:DeepMind再获突破,用AI开启理解电子相互作用之路
- option 82与DHCP中继代理
- python中ThreadLocal的理解与使用
- jvm性能调优实战 - 49OOM异常进行监控以及online处理
- Java 如何线程间通信,面试被问哭。。。
- 【工作秘籍】Facebook内部高效工作大揭秘
- html布局(盒子)
- fopen、fwrite使用
- 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 7丨字节面试真题【难度困难】
- 2019年关于VM和Kubernetes的思考 | 技术头条
- 运营必备,系统运营知识有这篇就够了!
- C语言中二维数组名与数组地址、首行地址、首行首元素地址关系与区别详解(初学者必须掌握)
- “非IE内核浏览器”第一阶段开发计划发布
- Linux C socket 编程之TCP
- DAN疼之后上些基础知识---自定义HttpModule和httpHandler
- 【转】AsyncTask的用法
- 阿里云解决方案架构师,讲述分布式架构云平台解决方案(附图文)
- paip.提升开发效率-----vs2010源码选择字串高亮
- 【雅思单词】【绿皮书】雅思单词-错词-第三遍