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读写ini文件示例(python读写文件)
Mar 25 Python
使用Python的web.py框架实现类似Django的ORM查询的教程
May 02 Python
Python selenium如何设置等待时间
Sep 15 Python
Scrapy-redis爬虫分布式爬取的分析和实现
Feb 07 Python
pandas创建新Dataframe并添加多行的实例
Apr 08 Python
Python实现多线程的两种方式分析
Aug 29 Python
Python txt文件加入字典并查询的方法
Jan 15 Python
在Python中将函数作为另一个函数的参数传入并调用的方法
Jan 22 Python
浅析Python 读取图像文件的性能对比
Mar 07 Python
python 正则表达式参数替换实例详解
Jan 17 Python
python中rb含义理解
Jun 18 Python
Django模型层实现多表关系创建和多表操作
Jul 21 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程序员工具
2008/05/26 PHP
用PHP程序实现支持页面后退的两种方法
2008/06/30 PHP
php对csv文件的读取,写入,输出下载操作详解
2013/08/10 PHP
PHP抓取远程图片(含不带后缀的)教程详解
2016/10/21 PHP
PHP使用数组实现矩阵数学运算的方法示例
2017/05/29 PHP
php strftime函数获取日期时间(switch用法)
2018/05/16 PHP
PHP后台实现微信小程序登录
2018/08/03 PHP
javascript各种复制代码收集
2008/09/20 Javascript
Jquery UI震动效果实现原理及步骤
2013/02/04 Javascript
jquery动态加载js三种方法实例
2013/08/03 Javascript
Lua表达式和控制结构学习笔记
2014/12/15 Javascript
jQuery中live()方法用法实例
2015/01/19 Javascript
AngularJS实现表单手动验证和表单自动验证
2015/12/09 Javascript
jquery+Jscex打造游戏力度条
2020/09/12 Javascript
微信禁止下拉查看URL的处理方法
2017/09/28 Javascript
ejsExcel模板在Vue.js项目中的实际运用
2018/01/27 Javascript
小程序实现页面顶部选项卡效果
2018/11/06 Javascript
Vue.js的动态组件模板的实现
2018/11/26 Javascript
layui自定义插件citySelect实现省市区三级联动选择
2019/07/26 Javascript
Vue的状态管理vuex使用方法详解
2020/02/05 Javascript
使用Python的Scrapy框架十分钟爬取美女图
2016/12/26 Python
python 实现对文件夹中的图像连续重命名方法
2018/10/25 Python
Python Web框架之Django框架cookie和session用法分析
2019/08/16 Python
详解pycharm连接不上mysql数据库的解决办法
2020/01/10 Python
python实现五子棋游戏(pygame版)
2020/01/19 Python
python 实现汉诺塔游戏
2020/11/28 Python
Pycharm 解决自动格式化冲突的设置操作
2021/01/15 Python
中国排名第一的外贸销售网站:LightInTheBox.com(兰亭集势)
2016/10/28 全球购物
Wedgwood英国官方网站:英式精致骨瓷餐具、礼品与生活精品,源于1759年
2019/09/02 全球购物
美德少年事迹材料1000字
2014/08/21 职场文书
国际商务专业毕业生自我鉴定2014
2014/09/27 职场文书
支部书记四风问题对照检查材料
2014/10/04 职场文书
2015年语文教学工作总结
2015/05/25 职场文书
Python机器学习三大件之一numpy
2021/05/10 Python
Win11怎么跳过联网验机 ?Win11跳过联网验机激活教程
2022/04/05 数码科技
国际最新研究在陨石中发现DNA主要成分 或由陨石带来地球
2022/04/29 数码科技