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如何使用AIML搭建聊天机器人
Jan 27 Python
python用模块zlib压缩与解压字符串和文件的方法
Dec 16 Python
Python方法的延迟加载的示例代码
Dec 18 Python
对python捕获ctrl+c手工中断程序的两种方法详解
Dec 26 Python
对python函数签名的方法详解
Jan 22 Python
python实现QQ批量登录功能
Jun 19 Python
Django框架HttpRequest对象用法实例分析
Nov 01 Python
Python通过socketserver处理多个链接
Mar 18 Python
Python下载的11种姿势(小结)
Nov 18 Python
Python从MySQL数据库中面抽取试题,生成试卷
Jan 14 Python
M1芯片安装python3.9.1的实现
Feb 02 Python
pygame面向对象的飞行小鸟实现(Flappy bird)
Apr 01 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打印输出棋盘的实现方法
2014/12/23 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
通过JAVAScript实现页面自适应
2007/01/19 Javascript
JavaScript入门教程(6) Window窗口对象
2009/01/31 Javascript
JavaScript 异步调用框架 (Part 6 - 实例 & 模式)
2009/08/04 Javascript
javascript自执行函数之伪命名空间封装法
2010/12/25 Javascript
Linux下使用jq友好的打印JSON技巧分享
2014/11/18 Javascript
jQuery中toggleClass()方法用法实例
2015/01/05 Javascript
解决WordPress使用CDN后博文无法评论的错误
2015/12/15 Javascript
JavaScript中setter和getter方法介绍
2016/07/11 Javascript
深入理解JS中的Function.prototype.bind()方法
2016/10/11 Javascript
Node.js实现连接mysql数据库功能示例
2017/09/15 Javascript
微信小程序 动画的简单实例
2017/10/12 Javascript
jquery 实现拖动文件上传加载进度条功能
2018/03/18 jQuery
node.js之基础加密算法模块crypto详解
2018/09/11 Javascript
JavaScript ES6箭头函数使用指南
2018/12/30 Javascript
Javascript 类型转换、封闭函数及常见内置对象操作示例
2019/11/15 Javascript
使用Python的Flask框架来搭建第一个Web应用程序
2016/06/04 Python
Python subprocess库的使用详解
2018/10/26 Python
Pandas GroupBy对象 索引与迭代方法
2018/11/16 Python
解决python3 HTMLTestRunner测试报告中文乱码的问题
2018/12/17 Python
python实现从尾到头打印单链表操作示例
2020/02/22 Python
Python爬取数据并实现可视化代码解析
2020/08/12 Python
纯CSS3实现Material Design效果
2017/03/09 HTML / CSS
美国糖果店:Sugarfina
2019/02/21 全球购物
美国购买体育赛事门票网站:TicketCity
2019/03/06 全球购物
阿尔卡特(中国)的面试题目
2014/08/20 面试题
实习生自我评价
2014/01/18 职场文书
小学生美德少年事迹
2014/02/02 职场文书
军训鉴定表自我鉴定
2014/02/13 职场文书
党校个人自我鉴定范文
2014/03/28 职场文书
广场舞大赛策划方案
2014/05/31 职场文书
作文评语怎么写
2014/12/25 职场文书
2015年治庸问责工作总结
2015/07/27 职场文书
详解Python 3.10 中的新功能和变化
2021/04/28 Python
日元符号 ¥
2022/02/17 杂记