knn手写识别
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手写识别的更多相关文章
- 机器学习实战一:kNN手写识别系统
实战一:kNN手写识别系统 本文将一步步地构造使用K-近邻分类器的手写识别系统.由于能力有限,这里构造的系统只能识别0-9.需要识别的数字已经使用图形处理软件,处理成具有相同的色彩和大小:32像素*3 ...
- opencv实现KNN手写数字的识别
人工智能是当下很热门的话题,手写识别是一个典型的应用.为了进一步了解这个领域,我阅读了大量的论文,并借助opencv完成了对28x28的数字图片(预处理后的二值图像)的识别任务. 预处理一张图片: 首 ...
- 机器学习实战kNN之手写识别
kNN算法算是机器学习入门级绝佳的素材.书上是这样诠释的:“存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都有标签,即我们知道样本集中每一条数据与所属分类的对应关系.输入没有标签的新数据 ...
- python 实现 KNN 分类器——手写识别
1 算法概述 1.1 优劣 优点:进度高,对异常值不敏感,无数据输入假定 缺点:计算复杂度高,空间复杂度高 应用:主要用于文本分类,相似推荐 适用数据范围:数值型和标称型 1.2 算法伪代码 (1)计 ...
- k最邻近算法——使用kNN进行手写识别
上篇文章中提到了使用pillow对手写文字进行预处理,本文介绍如何使用kNN算法对文字进行识别. 基本概念 k最邻近算法(k-Nearest Neighbor, KNN),是机器学习分类算法中最简单的 ...
- kNN算法实例(约会对象喜好预测和手写识别)
import numpy as np import operator import random import os def file2matrix(filePath):#从文本中提取特征矩阵和标签 ...
- 【Win 10 应用开发】手写识别
记得前面(忘了是哪天写的,反正是前些天,请用力点击这里观看)老周讲了一个14393新增的控件,可以很轻松地结合InkCanvas来完成涂鸦.其实,InkCanvas除了涂鸦外,另一个大用途是墨迹识别, ...
- JS / Egret 单笔手写识别、手势识别
UnistrokeRecognizer 单笔手写识别.手势识别 UnistrokeRecognizer : https://github.com/RichLiu1023/UnistrokeRecogn ...
- (手写识别) Zinnia库及其实现方法研究
Zinnia库及其实现方法研究 (转) zinnia是一个开源的手写识别库.采用C++实现.具有手写识别,学习以及文字模型数据制作转换等功能. 项目地址 [http://zinnia.sourcefo ...
随机推荐
- SpringCloud初体验:七、gateway 网关服务如何做token验证
说说背景:假如有一个用户服在用户登录后,生成一个token给到客户端,用户每次请求时都需要这个token,于是每次都会在网关 gateway 校验,校验通过后网关从token中解析出userId,然后 ...
- 【jmeter】jmeter之-聚合点
集合点:简单来理解一下,虽然我们的“性能测试”理解为“多用户并发测试”,但真正的并发是不存在的,为了更真实的实现并发这感念,我们可以在需要压力的地方设置集合点, 还拿那个用户和密码的地方,每到输入用户 ...
- ios获取安装的app
http://www.iphonedevsdk.com/forum/iphone-sdk-development/22289-possible-retrieve-these-information.h ...
- 【Spring学习笔记-MVC-16】Spring MVC之重定向-解决中文乱码
概述 spring MVC框架controller间跳转,需重定向,主要有如下三种: 不带参数跳转:形如:http://localhost:8080/SpringMVCTest/test/myRedi ...
- 【用jersey构建REST服务】系列文章
1.用Jersey构建RESTful服务1--HelloWorld http://blog.csdn.NET/kkkloveyou/article/details/21391033 2.用Jersey ...
- 安装phoenix时,执行命令./sqlline.py hostname1,hostname2.hostname3..... 时报错 ImportError: No module named argparse
问题描述: 怎么解决呢: 网上看了好多方法,但是本屌丝表示看不懂啊,没理解人家的博客的博大精深,好吧我们回到正题!! 先切换到root用户下安装这个东西 yum install python-a ...
- MySQL 查看执行的SQL记录
我们时常会有查看MySQL服务端执行的SQL记录.在MySQL5.1之后提供了支持,通过在启动时加入-l 或者--log选项即可: mysqld -l mysqld --log 在后面的版本(5.1. ...
- WARN hdfs.DFSClient: Caught exception java.lang.InterruptedException
Hadoop 2.7.4 The reason is this: originally, DataStreamer::closeResponder always prints a warning ab ...
- 显式锁(三)读写锁ReadWriteLock
前言: 上一篇文章,已经很详细地介绍了 显式锁Lock 以及 其常用的实现方式- - ReetrantLock(重入锁),本文将介绍另一种显式锁 - - 读写锁ReadWriteLock. ...
- Bogart gFunction.vb
Module gFunction '其它不是常用的方法及函數 #Region " 將指定的數據格式轉換為英文格式" Public Function EnglishFormat(By ...