import numpy as np
import operator
import os #KNN算法
def knn(k,testdata,traindata,labels):#(k,测试样本,训练集,分类)
traindatasize=traindata.shape[0]#行数
#测试样本和训练集样本数可能不一样,因此需要将测试集样本数扩展成和训练集一样多
#从行方向扩展 tile(a,(size,1))
dif=np.tile(testdata,(traindatasize,1))-traindata
#计算距离
sqdif=dif**2
sumsqdif=sqdif.sum(axis=1)
distance=sumsqdif**0.5 sortdistance=distance.argsort()#从小到大排列,结果返回元素位置
count={}
for i in range(k):
vote=labels[sortdistance[i]]
#统计每一类列样本的数量
count[vote]=count.get(vote,0)+1
sortcount=sorted(count.items(),key=operator.itemgetter(1),reverse=True)
#取包含样本数量最多的那一类别
return sortcount[0][0] #加载数据,将文件转化为数组形式
def datatoarray(filename):
arr=[]
fh=open(filename)
for i in range(32):
thisline=fh.readline()
for j in range(32):
arr.append(int(thisline[j]))
return arr #获取文件的lable
def get_labels(filename):
label=int(filename.split('_')[0])
return label #建立训练数据
def train_data():
labels=[]
trainlist=os.listdir('traindata/')
num=len(trainlist)
#长度1024(列),每一行存储一个文件
#用一个数组存储所有训练数据,行:文件总数,列:1024
trainarr=np.zeros((num,1024))
for i in range(num):
thisfile=trainlist[i]
labels.append(get_labels(thisfile))
trainarr[i,:]=datatoarray("traindata/"+thisfile)
return trainarr,labels #用测试数据调用KNN算法进行测试
def datatest():
a=[]#准确结果
b=[]#预测结果
traindata,labels=train_data()
testlist=os.listdir('testdata/')
fh=open('result_knn.csv','a')
for test in testlist:
testfile='testdata/'+test
testdata=datatoarray(testfile)
result=knn(3,testdata,traindata,labels)
#将预测结果存在文本中
fh.write(test+'-----------'+str(result)+'\n')
a.append(int(test.split('_')[0]))
b.append(int(result))
fh.close()
return a,b if __name__=='__main__':
a,b=datatest()
num=0
for i in range(len(a)):
if(a[i]==b[i]):
num+=1
else:
print("预测失误:",a[i],"预测为",b[i])
print("测试样本数为:",len(a))
print("预测成功数为:",num)
print("模型准确率为:",num/len(a))

knn手写识别的更多相关文章

  1. 机器学习实战一:kNN手写识别系统

    实战一:kNN手写识别系统 本文将一步步地构造使用K-近邻分类器的手写识别系统.由于能力有限,这里构造的系统只能识别0-9.需要识别的数字已经使用图形处理软件,处理成具有相同的色彩和大小:32像素*3 ...

  2. opencv实现KNN手写数字的识别

    人工智能是当下很热门的话题,手写识别是一个典型的应用.为了进一步了解这个领域,我阅读了大量的论文,并借助opencv完成了对28x28的数字图片(预处理后的二值图像)的识别任务. 预处理一张图片: 首 ...

  3. 机器学习实战kNN之手写识别

    kNN算法算是机器学习入门级绝佳的素材.书上是这样诠释的:“存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都有标签,即我们知道样本集中每一条数据与所属分类的对应关系.输入没有标签的新数据 ...

  4. python 实现 KNN 分类器——手写识别

    1 算法概述 1.1 优劣 优点:进度高,对异常值不敏感,无数据输入假定 缺点:计算复杂度高,空间复杂度高 应用:主要用于文本分类,相似推荐 适用数据范围:数值型和标称型 1.2 算法伪代码 (1)计 ...

  5. k最邻近算法——使用kNN进行手写识别

    上篇文章中提到了使用pillow对手写文字进行预处理,本文介绍如何使用kNN算法对文字进行识别. 基本概念 k最邻近算法(k-Nearest Neighbor, KNN),是机器学习分类算法中最简单的 ...

  6. kNN算法实例(约会对象喜好预测和手写识别)

    import numpy as np import operator import random import os def file2matrix(filePath):#从文本中提取特征矩阵和标签 ...

  7. 【Win 10 应用开发】手写识别

    记得前面(忘了是哪天写的,反正是前些天,请用力点击这里观看)老周讲了一个14393新增的控件,可以很轻松地结合InkCanvas来完成涂鸦.其实,InkCanvas除了涂鸦外,另一个大用途是墨迹识别, ...

  8. JS / Egret 单笔手写识别、手势识别

    UnistrokeRecognizer 单笔手写识别.手势识别 UnistrokeRecognizer : https://github.com/RichLiu1023/UnistrokeRecogn ...

  9. (手写识别) Zinnia库及其实现方法研究

    Zinnia库及其实现方法研究 (转) zinnia是一个开源的手写识别库.采用C++实现.具有手写识别,学习以及文字模型数据制作转换等功能. 项目地址 [http://zinnia.sourcefo ...

随机推荐

  1. eclipse中的XML文件无法快捷键注释问题

    好多朋友都发现在ME6.0或跟高版本中“Ctrl+Shift+c”或者是“Ctrl+Shift+/”快捷键无论你怎么点,它就是不起作用,恼火吧? 百度 还是 google 都没有找到 合理的说法,更有 ...

  2. BASIC-27_蓝桥杯_2n皇后问题

    题目: 问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行.同一列或同一条对角线上,任意的两个白皇后都不在同一行.同一 ...

  3. 使用pip安装Scrapy出错

    目录 安装Scrapy出错 安装 使用pip安装(Ubuntu) 错误信息 解决方法 安装Scrapy出错 安装 使用pip安装(Ubuntu) # 安装pip sudo apt install py ...

  4. 转转转!java继承中的this和super

    学习java时看了不少尚学堂马士兵的视频,还是挺喜欢马士兵的讲课步骤的,二话不说,先做实例,看到的结果才是最实际的,理论神马的全是浮云.只有在实际操作过程中体会理论,在实际操作过程中升华理论才是最关键 ...

  5. POJ 1679 The Unique MST (次小生成树kruskal算法)

    The Unique MST 时间限制: 10 Sec  内存限制: 128 MB提交: 25  解决: 10[提交][状态][讨论版] 题目描述 Given a connected undirect ...

  6. js中replace的用法(两种常用举例,还有好多用法不一一列举)

    1.替换特定字符 <html><body> <script type="text/javascript"> var str="Visi ...

  7. 自己写的 Readini 类

    using System; using System.IO; using System.Runtime.InteropServices; using System.Text; using System ...

  8. 初学 python 之 用户登录实现过程

    要求编写登录接口 : 1. 输入用户名和密码 2.认证成功后显示欢迎信息 3.用户名输错,提示用户不存在,重新输入(5次错误,提示尝试次数过多,退出程序) 4.用户名正确,密码错误,提示密码错误,重新 ...

  9. 对抗样本攻防战,清华大学TSAIL团队再获CAAD攻防赛第一

    最近,在全球安全领域的殿堂级盛会 DEF CON 2018 上,GeekPwn 拉斯维加斯站举行了 CAAD CTF 邀请赛,六支由国内外顶级 AI 学者与研究院组成的队伍共同探讨以对抗训练为攻防手段 ...

  10. mysql 更新(二)安装和基本管理

    03-MySql安装和基本管理   本节掌握内容: MySQL的介绍安装.启动 MySQL破解密码 MySQL中统一字符编码 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目 ...