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 ...
随机推荐
- Windows10更改网络类型-公用-专用
1.Get-NetConnectionProfile 2. Set-NetConnectionProfile -Name "未识别的网络" -NetworkCategory Pri ...
- 跟老齐学Django 项目实战笔记
创建项目 mysite 创建应用 blog mysit/settings.py配置app INSTALLED_APPS = [ 'django.contrib.admin', 'django.cont ...
- BASIC-22_蓝桥杯_FJ的字符串
示例代码: #include <stdio.h>#define N 1000000 int main(void){ int n = 0 , i = 0; char arr[N] , tmp ...
- bzoj 2601: [Jsoi2011]同分异构体计数
Description Antonio 最近对有机化学比较感兴趣,他想请你帮助他快速计算出某种烃类的同分异 构体的数目. 为了表述方便,我们作出如下定义: 环烷烃: 具有n 个碳原子的环烷烃可 ...
- [转]NSIS:使用SectionSetFlags根据不同环境自动勾选特定区段
转自: http://www.flighty.cn/html/bushu/20140526_232.html 在微软SQL2000+SP4集成安装版安装包中可以根据目标操作系统自动勾选对应的版本, ...
- post 中文数据到elasticsearch restful接口报json_parse_exception 问题
我们的客户端程序直接调用es 的restful接口, 通过post json数据去查询, 但post数据有中文的时候,有些中文会报异常,有些中文不会 {"error":{" ...
- 1011 World Cup Betting (20 分)
1011 World Cup Betting (20 分) With the 2010 FIFA World Cup running, football fans the world over wer ...
- linux下给php安装curl、gd(ubuntu)
安装方法很简单,只需要一条命令. # sudo apt-get install curl libcurl3 libcurl3-dev php5-curl 恭喜,PHP5 cURL安装完毕.记得重启Ap ...
- TCP阻塞模式开发
在阻塞模式下,在IO操作完成前,执行的操作函数将一直等候而不会立刻返回,该函数所在的进程会阻塞在这里.相反,在非阻塞模式下,套接字函数会立即返回,而不管IO是否完成,该函数所在的线程将继续运行.阻塞模 ...
- tomcat-架构原理
Apache Tomcat,通常称为Tomcat服务器,是一个开源的java servlet容器由Apache软件基金会(ASF)开发.Tomcat实现了几个java EE规范包括java servl ...