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 logging类库使用例子
Nov 22 Python
Python连接mysql数据库的正确姿势
Feb 03 Python
python中Matplotlib实现绘制3D图的示例代码
Sep 04 Python
Python多线程处理实例详解【单进程/多进程】
Jan 30 Python
Python for循环与range函数的使用详解
Mar 23 Python
Python自动抢红包教程详解
Jun 11 Python
python 图片去噪的方法示例
Jul 09 Python
python redis连接 有序集合去重的代码
Aug 04 Python
Python中的 sort 和 sorted的用法与区别
Aug 10 Python
postman和python mock测试过程图解
Feb 22 Python
基于python实现地址和经纬度转换
May 19 Python
教你怎么用Python操作MySql数据库
May 31 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面向对象
2012/02/22 PHP
关于PHPDocument 代码注释规范的总结
2013/06/25 PHP
php array_keys 返回数组的键名
2016/10/25 PHP
Smarty日期时间操作方法示例
2016/11/15 PHP
javascript学习笔记(三) String 字符串类型介绍
2012/06/19 Javascript
jQuery常见开发技巧详细整理
2013/01/02 Javascript
JS获取页面input控件中所有text控件并追加样式属性
2013/02/25 Javascript
JavaScript cookie的设置获取删除详解
2014/02/11 Javascript
使用js画图之画切线
2015/01/12 Javascript
BootStrap文件上传样式超好看【持续更新】
2016/05/10 Javascript
JS不完全国际化&本地化手册 之 理论篇
2016/09/27 Javascript
微信小程序 LOL 英雄介绍开发实例
2016/09/30 Javascript
jQuery自定义组件(导入组件)
2016/11/08 Javascript
如何解决jQuery EasyUI 已打开Tab重新加载问题
2016/12/19 Javascript
AngularJS 使用ng-repeat报错 [ngRepeat:dupes]
2017/01/19 Javascript
js for循环倒序输出数组元素的实例
2017/03/01 Javascript
你可能不知道的前端算法之文字避让(inMap)
2018/01/12 Javascript
vue中使用axios post上传头像/图片并实时显示到页面的方法
2018/09/27 Javascript
JS使用百度地图API自动获取地址和经纬度操作示例
2019/04/16 Javascript
ES6知识点整理之数组解构和字符串解构的应用示例
2019/04/17 Javascript
微信小程序分享功能onShareAppMessage(options)用法分析
2019/04/24 Javascript
JS实现的排列组合算法示例
2019/07/16 Javascript
vue-router 2.0 跳转之router.push()用法说明
2020/08/12 Javascript
prettier自动格式化去换行的实现代码
2020/08/25 Javascript
python通过装饰器检查函数参数数据类型的方法
2015/03/13 Python
解决pycharm 误删掉项目文件的处理方法
2018/10/22 Python
Django urls.py重构及参数传递详解
2019/07/23 Python
python如何实现图片压缩
2020/09/11 Python
英国卫浴商店:Ergonomic Design
2019/09/22 全球购物
美国折扣香水网站:The Perfume Spot
2020/12/12 全球购物
《最佳路径》教学反思
2014/04/13 职场文书
食品药品安全责任书
2015/05/11 职场文书
2015年度酒店客房部工作总结
2015/05/25 职场文书
党员转正大会主持词
2015/07/02 职场文书
如何用JavaScript实现一个数组惰性求值库
2021/05/05 Javascript
nginx代理实现静态资源访问的示例代码
2022/07/07 Servers