python使用KNN算法手写体识别


Posted in Python onFebruary 01, 2018

本文实例为大家分享了用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()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python用字典统计单词或汉字词个数示例
Apr 22 Python
Python脚本实现代码行数统计代码分享
Mar 10 Python
Python安装图文教程 Pycharm安装教程
Mar 27 Python
数组保存为txt, npy, csv 文件, 数组遍历enumerate的方法
Jul 09 Python
Python格式化输出字符串方法小结【%与format】
Oct 29 Python
python 多线程将大文件分开下载后在合并的实例
Nov 09 Python
对python内置map和six.moves.map的区别详解
Dec 19 Python
python面向对象实现名片管理系统文件版
Apr 26 Python
python数据爬下来保存的位置
Feb 17 Python
Django实现将views.py中的数据传递到前端html页面,并展示
Mar 16 Python
mac安装python3后使用pip和pip3的区别说明
Sep 01 Python
Pytorch数据读取之Dataset和DataLoader知识总结
May 23 Python
python @property的用法及含义全面解析
Feb 01 #Python
详解Tensorflow数据读取有三种方式(next_batch)
Feb 01 #Python
Python3 XML 获取雅虎天气的实现方法
Feb 01 #Python
Python命令行解析模块详解
Feb 01 #Python
python2.7到3.x迁移指南
Feb 01 #Python
Python Paramiko模块的使用实际案例
Feb 01 #Python
python中使用xlrd读excel使用xlwt写excel的实例代码
Jan 31 #Python
You might like
十天学会php之第七天
2006/10/09 PHP
php expects parameter 1 to be resource, array given 错误
2011/03/23 PHP
提升PHP性能的21种方法介绍
2013/06/25 PHP
PHP里的单例类写法实例
2015/06/25 PHP
PHP魔术方法之__call与__callStatic使用方法
2017/07/23 PHP
纯JavaScript实现HTML5 Canvas六种特效滤镜示例
2013/06/28 Javascript
浏览器窗口加载和大小改变事件示例
2014/02/27 Javascript
原生的html元素选择器类似jquery选择器
2014/10/15 Javascript
js style动态设置table高度
2014/10/21 Javascript
JS实现仿google、百度搜索框输入信息智能提示的实现方法
2015/04/20 Javascript
javascript中的正则表达式使用详解
2015/08/30 Javascript
javascript实现随机生成DIV背景色
2016/06/20 Javascript
静态页面html中跳转传值的JS处理技巧
2016/06/22 Javascript
JavaScript实现DOM对象选择器
2016/09/24 Javascript
详解React-Todos入门例子
2016/11/08 Javascript
给Easyui-Datebox设置隐藏或者不可用的解决方法
2017/05/26 Javascript
react学习笔记之state以及setState的使用
2017/12/07 Javascript
VSCode 配置uni-app的方法
2020/07/11 Javascript
vue+element使用动态加载路由方式实现三级菜单页面显示的操作
2020/08/04 Javascript
Python实现3行代码解简单的一元一次方程
2014/08/18 Python
Python fileinput模块使用介绍
2014/11/30 Python
使用Python的urllib和urllib2模块制作爬虫的实例教程
2016/01/20 Python
Python3的urllib.parse常用函数小结(urlencode,quote,quote_plus,unquote,unquote_plus等)
2016/09/18 Python
python bottle框架支持jquery ajax的RESTful风格的PUT和DELETE方法
2017/05/24 Python
python+selenium实现163邮箱自动登陆的方法
2017/12/31 Python
基于Django与ajax之间的json传输方法
2018/05/29 Python
Python这样操作能存储100多万行的xlsx文件
2019/04/16 Python
Python定义一个函数的方法
2020/06/15 Python
美国内衣第一品牌:Hanes(恒适)
2016/07/29 全球购物
澳大利亚制造的蜡烛和扩散器:Glasshouse Fragrances
2018/05/20 全球购物
Expedia法国:全球最大在线旅游公司
2018/09/30 全球购物
e路東瀛(JAPANiCAN)香港:日本旅游、日本酒店和温泉旅馆预订
2018/11/21 全球购物
部队学习十八大感言
2014/01/11 职场文书
三年级语文教学反思
2014/02/01 职场文书
护理工作心得体会
2016/01/22 职场文书
Golang MatrixOne使用介绍和汇编语法
2022/04/19 Golang