KNN算法实现手写体区分

KNN算法在python里面可以使用pip install指令安装,我在实现之前查看过安装的KNN算法,十分全面,包括了对于手写体数据集的处理。我这里只是实现了基础的识别方法,能力有限,没有数据处理方法。

电脑太渣,没有自己训练数据集。

选取的数据集是已经处理好的。

如果自己要手动处理数据集,推荐mnist的。自己要写算法处理成图片。

#! /usr/bin/env python
# -*- coding:utf-8 -*-
# Author: gjt

import numpy as npfrom os import listdir
from sklearn.neighbors import KNeighborsClassifier as knn

def img2vector(filename):
    returnVet = np.zeros((1,1024))
    fr = open(filename)

    for i in range(32):
        listStr = fr.readline()
        for j in range(32):
            returnVet[0,32*i+j] = int(listStr[j])
    return returnVet

def handwritingClassTest():
    hwLabels = []
    trainingFileList = listdir(‘trainingDigits‘)
    m = len(trainingFileList)
    trainingMat = np.zeros((m,1024))
    for i in range(m):
        fileNameStr = trainingFileList[i]
        classNumber = int(fileNameStr.split(‘_‘)[0])
        hwLabels.append(classNumber)
        trainingMat[i, :] = img2vector(‘trainingDigits/%s‘ % (fileNameStr))
    neigh = knn(n_neighbors=3,algorithm=‘auto‘)
    neigh.fit(trainingMat,hwLabels)
    testFileList = listdir("testdigits")
    errorCount = 0.0
    mTest = len(testFileList)
    for i in range(mTest):
        fileNameStr = testFileList[i]
        classNumber = int(fileNameStr.split("_")[0])
        vectorUnderTest = img2vector(‘testDigits/%s‘%(fileNameStr))
        classifierResult = neigh.predict(vectorUnderTest)
        print("分类返回结果%d\t真实结果%d" % (classifierResult, classNumber))
        if (classNumber != classifierResult):
            errorCount += 1.0
        print("总共错了%d个\t错误率为%f%%" % (errorCount, errorCount / mTest * 100))
if __name__ == "__main__":
    handwritingClassTest()

效果还是可观的。。。

参考《机器学习实战》

我们不生产代码,只是代码的搬运工。

。。。。。。。。。。。。。。。

原文地址:https://www.cnblogs.com/dddAndwerGuan/p/8483768.html

时间: 2025-01-31 06:51:27

KNN算法实现手写体区分的相关文章

Opencv学习之路—Opencv下基于HOG特征的KNN算法分类训练

在计算机视觉研究当中,HOG算法和LBP算法算是基础算法,但是却十分重要.后期很多图像特征提取的算法都是基于HOG和LBP,所以了解和掌握HOG,是学习计算机视觉的前提和基础. HOG算法的原理很多资料都可以查到,简单来说,就是将图像分成一个cell,通过对每个cell的像素进行梯度处理,进而根据梯度方向和梯度幅度来得到cell的图像特征.随后,将每个cell的图像特征连接起来,得到一个BLock的特征,进而得到一张图片的特征.Opencv当中自带HOG算法,可以直接调用,进行图像的特征提取.但

Python 基于KNN算法的手写识别系统

本文主要利用k-近邻分类器实现手写识别系统,训练数据集大约2000个样本,每个数字大约有200个样本,每个样本保存在一个txt文件中,手写体图像本身是32X32的二值图像,如下图所示: 手写数字识别系统的测试代码: from numpy import * import operator from os import listdir #inX    要检测的数据 #dataSet   数据集 #labels    结果集 #k      要对比的长度 def classify0(inX, data

《机器学习实战》读书笔记2:K-近邻(kNN)算法

声明:文章是读书笔记,所以必然有大部分内容出自<机器学习实战>.外加个人的理解,另外修改了部分代码,并添加了注释 1.什么是K-近邻算法? 简单地说,k-近邻算法采用测量不同特征值之间距离的方法进行分类.不恰当但是形象地可以表述为近朱者赤,近墨者黑.它有如下特点: 优点:精度高.对异常值不敏感.无数据输入假定 缺点:计算复杂度高.空间复杂度高 适用数据范围:数值型和标称型 2.K-近邻算法的工作原理: 存在一个样本数据集合,也称作训练样本集,并且样本集中的每个数据都存在标签,即我们知道样本集中

Python/matlab实现KNN算法

Python 算法伪码: 对未知类别属性的数据集中的每个点依次执行以下操作: 1)计算已知类别数据集中的点与当前点之间的距离: 2)按照距离递增次序排序: 3)选取与当前点距离最小的k个点: 4)确定前k个点所在类别的出现频率: 5)返回前k个点出现频率最高的类别作为当前点的预测分类. 欧氏距离计算: (1)二维平面上两点xA(x1,y1)与xB(x2,y2)间的欧氏距离: (2)三维空间两点xA(x1,y1,z1)与xB(x2,y2,z2)间的欧氏距离: (3)两个n维向量xA(x11,x12

具体knn算法概念参考knn代码python实现

具体knn算法概念参考knn代码python实现上面是参考<机器学习实战>的代码,和knn的思想 # _*_ encoding=utf8 _*_ import numpy as npimport tensorflow as tffrom tensorflow.examples.tutorials.mnist import input_data # 导入手写体识别的数据mnist = input_data.read_data_sets("../data", one_hot=T

Machine Learning In Action 第二章学习笔记: kNN算法

本文主要记录<Machine Learning In Action>中第二章的内容.书中以两个具体实例来介绍kNN(k nearest neighbors),分别是: 约会对象预测 手写数字识别 通过“约会对象”功能,基本能够了解到kNN算法的工作原理.“手写数字识别”与“约会对象预测”使用完全一样的算法代码,仅仅是数据集有变化. 约会对象预测 1 约会对象预测功能需求 主人公“张三”喜欢结交新朋友.“系统A”上面注册了很多类似于“张三”的用户,大家都想结交心朋友.“张三”最开始通过自己筛选的

KNN算法--物以类聚,人以群分

KNN(K Nearest Neighbors,K近邻 )算法是机器学习所有算法中理论最简单,最好理解的.KNN是一种基于实例的学习,通过计算新数据与训练数据特征值之间的距离,然后选取K(K>=1)个距离最近的邻居进行分类判断(投票法)或者回归.如果K=1,那么新数据被简单分配给其近邻的类.KNN算法算是监督学习还是无监督学习呢?首先来看一下监督学习和无监督学习的定义.对于监督学习,数据都有明确的label(分类针对离散分布,回归针对连续分布),根据机器学习产生的模型可以将新数据分到一个明确的类

Python KNN算法

机器学习新手,接触的是<机器学习实战>这本书,感觉书中描述简单易懂,但对于python语言不熟悉的我,也有很大的空间.今天学习的是k-近邻算法. 1. 简述机器学习 在日常生活中,人们很难直接从原始数据本身获得所需信息.而机器学习就是把生活中无序的数据转换成有用的信息.例如,对于垃圾邮件的检测,侦测一个单词是否存在并没有多大的作用,然而当某几个特定单词同时出现时,再辅以考虑邮件的长度及其他因素,人们就可以更准确地判定该邮件是否为垃圾邮件. 机器学习分为监督学习和无监督学习,其中: (1)监督学

k-Means和KNN算法简述

k-means 算法 k-means 算法接受输入量 k :然后将n个数据对象划分为 k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高:而不同聚类中的对象相似度较小.聚类相似度是利用各聚类中对象的均值所获得一个“中心对象”(引力中心)来进行计算的. k-means 算法的工作过程说明如下:首先从n个数据对象任意选择 k 个对象作为初始聚类中心:而对于所剩下其它对象,则根据它们与这些聚类中心的相似度(距离),分别将它们分配给与其最相似的(聚类中心所代表的)聚类:然后再计算每个所获新聚类