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通过加号运算符操作列表的方法
Jul 28 Python
Python探索之实现一个简单的HTTP服务器
Oct 28 Python
Python数据结构与算法之常见的分配排序法示例【桶排序与基数排序】
Dec 15 Python
Python实现八皇后问题示例代码
Dec 09 Python
基于Python绘制美观动态圆环图、饼图
Jun 03 Python
OpenCV 之按位运算举例解析
Jun 19 Python
Python 通过正则表达式快速获取电影的下载地址
Aug 17 Python
详解pycharm自动import所需的库的操作方法
Nov 30 Python
Python关于拓扑排序知识点讲解
Jan 04 Python
微软开源最强Python自动化神器Playwright(不用写一行代码)
Jan 05 Python
linux系统下pip升级报错的解决方法
Jan 31 Python
python中pd.cut()与pd.qcut()的对比及示例
Jun 16 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实现基于微信公众平台开发SDK(demo)扩展的方法
2014/12/22 PHP
jMessageBox 基于jQuery的窗口插件
2009/12/09 Javascript
Javascript中的相等与不等运算
2010/04/25 Javascript
jquery submit ie6下失效的原因分析及解决方法
2013/11/15 Javascript
javascript自动给文本url地址增加链接的方法分享
2014/01/20 Javascript
JS判断字符串包含的方法
2015/05/05 Javascript
require.js的用法详解
2015/10/20 Javascript
使用angularjs创建简单表格
2016/01/21 Javascript
利用Angularjs实现幻灯片效果
2016/09/07 Javascript
Angularjs通过指令监听ng-repeat渲染完成后执行脚本的方法
2016/12/31 Javascript
js前端日历控件(悬浮、拖拽、自由变形)
2017/03/02 Javascript
JavaScript对象引用与赋值实例详解
2017/03/15 Javascript
bootstrap表格内容过长时用省略号表示的解决方法
2017/11/21 Javascript
vue.js element-ui tree树形控件改iview的方法
2018/03/29 Javascript
解决vue中使用Axios调用接口时出现的ie数据处理问题
2018/08/13 Javascript
javascript 高级语法之继承的基本使用方法示例
2019/11/11 Javascript
vue3使用vue-count-to组件的实现
2020/12/25 Vue.js
[54:06]OG vs TNC 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python中文件操作简明介绍
2015/04/13 Python
Python实现统计英文单词个数及字符串分割代码
2015/05/28 Python
python中利用Future对象异步返回结果示例代码
2017/09/07 Python
Python实现冒泡排序的简单应用示例
2017/12/11 Python
使用PyQt4 设置TextEdit背景的方法
2019/06/14 Python
Python判断字符串是否xx开始或结尾的示例
2019/08/08 Python
Python Opencv 通过轨迹(跟踪)栏实现更改整张图像的背景颜色
2020/03/09 Python
python中的split、rsplit、splitlines用法说明
2020/10/23 Python
HTML5微信播放全屏问题的解决方法
2017/03/09 HTML / CSS
七年级英语教学反思
2014/01/15 职场文书
师德标兵事迹材料
2014/12/19 职场文书
公务员政审材料
2014/12/23 职场文书
合作协议书格式范本
2016/03/21 职场文书
Apache POI的基本使用详解
2021/11/07 Servers
Python可视化学习之matplotlib内置单颜色
2022/02/24 Python
《杜鹃的婚约》OP主题曲「凸凹」无字幕影像公开
2022/04/08 日漫
Python Matplotlib绘制动画的代码详解
2022/05/30 Python
Java Spring读取和存储详细操作
2022/08/05 Java/Android