python使用KNN算法手写体识别
作者:一笑丶奈何 发布时间:2022-06-28 05:30:56
标签:python,KNN,识别
本文实例为大家分享了用KNN算法手写体识别的具体代码,供大家参考,具体内容如下
#!/usr/bin/python
#coding:utf-8
import numpy as np
import operator
import matplotlib
import matplotlib.pyplot as plt
import os
'''''
KNN算法
1. 计算已知类别数据集中的每个点依次执行与当前点的距离。
2. 按照距离递增排序。
3. 选取与当前点距离最小的k个点
4. 确定前k个点所在类别的出现频率
5. 返回前k个点出现频率最高的类别作为当前点的预测分类
'''
'''''
inX为要分类的向量
dataSet为训练样本
labels为标签向量
k为最近邻的个数
'''
def classify0(inX , dataSet , labels , k):
dataSetSize = dataSet.shape[0]#dataSetSize为训练样本的个数
diffMat = np.tile(inX , (dataSetSize , 1)) - dataSet#将inX扩展为dataSetSize行,1列
sqDiffMat = diffMat**2
sqDistances = sqDiffMat.sum(axis=1)
distances = sqDistances**0.5
sortedDistIndicies = distances.argsort()#返回的是元素从小到大排序后,该元素原来的索引值的序列
classCount = {}
for i in range(k):
voteIlabel = labels[sortedDistIndicies[i]]#voteIlabel为类别
classCount[voteIlabel] = classCount.get(voteIlabel,0)+1#如果之前这个voteIlabel是有的,那么就返回字典里这个voteIlabel里的值,如果没有就返回0
sortedClassCount = sorted(classCount.iteritems(),key=operator.itemgetter(1),reverse=True)#key=operator.itemgetter(1)的意思是按照字典里的第一个排序,{A:1,B:2},要按照第1个(AB是第0个),即‘1'‘2'排序。reverse=True是降序排序
print sortedClassCount
return sortedClassCount[0][0]
'''''
将图像转换为1*1024的向量
'''
def img2vector(filename):
returnVect = np.zeros((1,1024))
fr = open(filename)
for i in range(32):
line = fr.readline()
for j in range(32):
returnVect[0,i*32+j] = int(line[j] )
return returnVect
'''''
手写体识别系统测试
'''
def handwritingClassTest(trainFilePath,testFilePath):
hwLabels = []
trainingFileList = os.listdir(trainFilePath)
m=len(trainingFileList)
trainSet = np.zeros((m,1024))
for i in range(m):
filename = trainingFileList[i]
classNum = filename.split('.')[0]
classNum = int(classNum.split('_')[0])
hwLabels.append(classNum)
trainSet[i] = img2vector( os.path.join(trainFilePath,filename) )
testFileList = os.listdir(testFilePath)
errorCount = 0
mTest = len(testFileList)
for i in range(mTest):
filename = trainingFileList[i]
classNum = filename.split('.')[0]
classNum = int(classNum.split('_')[0])
vectorUnderTest = img2vector(os.path.join(trainFilePath, filename))
classifyNum = classify0(vectorUnderTest,trainSet,hwLabels,10)
print "the classifier came back with : %d , the real answer is : %d"% (classifyNum , classNum)
if(classifyNum != classNum) : errorCount+=1
print ("\nthe total number of error is : %d"%errorCount)
print ("\nthe error rate is : %f"%(float(errorCount)/mTest))
handwritingClassTest()
来源:https://www.cnblogs.com/Lambda721/p/8397453.html
0
投稿
猜你喜欢
- Pytorch统计参数网络参数数量def get_parameter_number(net): total_num
- 今天给一个客户巡检的情况下发从库没有业务的情况mysqld的cpu的一个core占用100%.查主库慢查询也没有关于写的SQL.可以说是典的
- 凯撒密码 是密码学中的一种简单的 替换加密 技术。明文中的所有字符都会替换为其按照字母表顺序向左(或向右)偏移一定量后得到的新字母,作为加密
- 简介使用百度深度学习框架paddlepaddle对人像图片进行自动化抠图安装根据PaddlePaddle官网命令安装如pip install
- 一、两层结构的ASP应用有何缺点 在Browser/Server 应用程序开发领域,微软公司的IIS/ASP以其强大的功能,良好的扩展能力,
- Python:1. print()函数:打印字符串2. raw_input()函数:从用户键盘捕获字符3. len()函数:计算字符长度4.
- 1.URLError首先解释下URLError可能产生的原因: 网络无连接,即本机无法上网 &
- 当Python执行import语句时,它会在一些路径中搜索Python模块和扩展模块。可以通过sys.path查看这些路径,比如:>&
- shapefile转换geojsonimport shapefileimport codecsfrom json import dumps#
- 其实网上已经有很多ASP生成htm的文章了,有一种方法是ASP+XML的生成方法,虽然有一种好处就是不用程序写模版就可以直接引用原来的要生成
- JavaScript中的字符串函数没有像VBScript\ASP中的内部函数那么全.不能像VB那样直接利用left和right函数来实现对字
- Python的安装并不难,但是要正确安装它的库以及配置环境变量则有些麻烦。对于刚刚开始想要学习Python的小伙伴来说,用Anaconda这
- 识别验证码OCR(Optical Character Recognition)即光学字符识别技术,专门用于对图片文字进行识别,并获取文本。字
- 例如1441,那么会产生“运行时错误”,报错信息类似下面:SessionID 错误 'ASP 0164 : 80004005'
- 列表是Python中最基本的数据结构,列表是最常用的Python数据类型,列表的数据项不需要具有相同的类型。列表中的每个元素都分配一个数字
- (1)更有意义的搜索 数据可被XML唯一的标识。没有XML,搜索软件必须了解每个数据库是如何构建的。这实际上是不可能的,因为每个数据库描述数
- 症状: 访问asp网页的时候出现如下错误:Server object error ''ASP 0178 : 80070005
- Oracle :NvlNVL函数:NVL函数是将NULL值的字段转换成默认字段输出。NVL(expr1,expr2)expr1,需要转换的字
- 1、解决方法(1)忽视元组。缺少类别标签时,通常这样做(假设挖掘任务与分类有关),除非元组有多个属性缺失值,否则该方法不太有效。当个属性缺值
- 中间件介绍中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与