python使用KNN算法手写体识别

 更新时间:2018年02月01日 09:47:32   作者:一笑丶奈何  
这篇文章主要为大家详细介绍了python使用KNN算法手写体识别,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了用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爬虫之对CSDN榜单进行分析

    Python爬虫之对CSDN榜单进行分析

    这篇文章主要介绍了Python爬虫之对CSDN榜单进行分析,文章有详细代码,简单易懂,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2023-01-01
  • Python自动化短视频生成脚本实现热门视频流水线生产

    Python自动化短视频生成脚本实现热门视频流水线生产

    有粉丝和说,最近在网上看到一些视频营销号一天能发布几百条短视频, 感觉是批量生成的,能不能用Python做个自动化短视频生成脚本呢?今天就带大家一起实现热门视频批量流水线生产
    2021-09-09
  • Python如何通过百度翻译API实现翻译功能

    Python如何通过百度翻译API实现翻译功能

    这篇文章主要介绍了Python如何通过百度翻译API实现翻译功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • 在Linux下使用Python的matplotlib绘制数据图的教程

    在Linux下使用Python的matplotlib绘制数据图的教程

    这篇文章主要介绍了在Linux下使用Python的matplotlib绘制数据图的教程,matplotlib基于Numpy进行科学计算上的延伸,需要的朋友可以参考下
    2015-06-06
  • 深入了解Python的类与模块化

    深入了解Python的类与模块化

    这篇文章主要介绍了Python中的面向对象编程范式以及模块化思想,并给出相应的实战示例及解释,对我们的学习和工作都有一定的价值,感兴趣的小伙伴可以了解一下
    2021-12-12
  • python通过urllib2爬网页上种子下载示例

    python通过urllib2爬网页上种子下载示例

    这篇文章主要介绍了通过urllib2、re模块抓种子下载的示例,需要的朋友可以参考下
    2014-02-02
  • Python中通用的文本相似度计算方法详解

    Python中通用的文本相似度计算方法详解

    这篇文章主要为大家详细介绍了三种Python中通用的文本相似度计算方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-04-04
  • python二进制串转字符串的方法详解

    python二进制串转字符串的方法详解

    这篇文章主要介绍了python二进制串转字符串的方法详解,使用json,可以自动检测编码,但需要注意的是,它返回的是python对象,不一定是字符串,具体是什么对象要视原始内容而定,需要的朋友可以参考下
    2023-11-11
  • python调用百度API实现人脸识别

    python调用百度API实现人脸识别

    这篇文章主要介绍了python调用百度API实现人脸识别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Python制作一个PPT文本提取工具

    Python制作一个PPT文本提取工具

    这篇文章主要为大家详细介绍了如何使用Python开发一个带图形界面的PPT文本提取工具,可以从PPTX文件中提取所有文本内容,有需要的小伙伴可以了解下
    2025-01-01

最新评论