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 03 Python
Python3遍历目录树实现方法
May 22 Python
深入解析Python中函数的参数与作用域
Mar 20 Python
Python基于time模块求程序运行时间的方法
Sep 18 Python
配置 Pycharm 默认 Test runner 的图文教程
Nov 30 Python
python3+PyQt5 实现Rich文本的行编辑方法
Jun 17 Python
使用 Django Highcharts 实现数据可视化过程解析
Jul 31 Python
Python 保持登录状态进行接口测试的方法示例
Aug 06 Python
Python Django2 model 查询介绍(条件、范围、模糊查询)
Mar 16 Python
踩坑:pytorch中eval模式下结果远差于train模式介绍
Jun 23 Python
python zip()函数的使用示例
Sep 23 Python
python基于opencv批量生成验证码的示例
Apr 28 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
绿山咖啡和蓝山咖啡
2021/03/04 新手入门
在PHP中利用XML技术构造远程服务(下)
2006/10/09 PHP
PHP 的几个配置文件函数
2006/12/21 PHP
PHP三层结构(上) 简单三层结构
2010/07/04 PHP
php实现微信公众平台账号自定义菜单类
2014/12/02 PHP
PHP中多线程的两个实现方法
2016/10/14 PHP
PHP切割整数工具类似微信红包金额分配的思路详解
2019/09/18 PHP
js动态添加事件并可传参数示例代码
2013/10/21 Javascript
浅析在javascript中创建对象的各种模式
2016/05/06 Javascript
easyui window refresh 刷新两次的解决方法(推荐)
2016/05/18 Javascript
让编辑器支持word复制黏贴、截屏的js代码
2016/10/17 Javascript
JS查找数组中重复元素的方法详解
2017/06/14 Javascript
vue设置一开始进入的页面教程
2019/10/28 Javascript
vue + node如何通过一个Txt文件批量生成MP3并压缩成Zip
2020/06/02 Javascript
Javascript var变量删除原理及实现
2020/08/26 Javascript
python封装对象实现时间效果
2020/04/23 Python
python实现监控linux性能及进程消耗性能的方法
2014/07/25 Python
Python xlwt设置excel单元格字体及格式
2020/04/18 Python
浅谈Python中的zip()与*zip()函数详解
2018/02/24 Python
将Python文件打包成.EXE可执行文件的方法
2019/08/11 Python
python创建与遍历List二维列表的方法
2019/08/16 Python
Python 中list ,set,dict的大规模查找效率对比详解
2019/10/11 Python
Python实现名片管理系统
2020/02/14 Python
pytorch 模型的train模式与eval模式实例
2020/02/20 Python
Invicta手表官方商店:百年制表历史的瑞士腕表品牌
2019/09/26 全球购物
英国女性化妆品收纳和家具网站:Beautify
2019/12/07 全球购物
意大利包包和行李箱销售网站:Bagaglio.it
2021/03/02 全球购物
实习生的自我评价
2014/01/08 职场文书
尽职尽责村干部自我鉴定
2014/01/23 职场文书
市场部业务员岗位职责
2014/04/02 职场文书
村抢险救灾方案
2014/05/09 职场文书
乡镇挂职心得体会
2014/09/04 职场文书
小学三八妇女节活动总结
2015/02/06 职场文书
储备店长岗位职责
2015/04/14 职场文书
大学学生会主席竞选稿
2015/11/19 职场文书
关于 Python json中load和loads区别
2021/11/07 Python