[机器学习案例1]基于KNN手写数字识别

原创 2017年05月23日 20:30:55

算法介绍

之前已经介绍过,简单来说,K-NN可以看成:有那么一堆你已经知道分类的数据,然后当一个新数据进入的时候,就开始跟训练数据里的每个点求距离,然后挑离这个训练数据最近的K个点看看这几个点属于什么类型,然后用少数服从多数的原则,给新数据归类。

算法步骤:

算法步骤:
1. step.1—初始化距离为最大值
2. step.2—计算未知样本和每个训练样本的距离dist
3. step.3—得到目前K个最临近样本中的最大距离maxdist
4. step.4—如果dist小于maxdist,则将该训练样本作为K-最近邻样本
5. step.5—重复步骤2、3、4,直到未知样本和所有训练样本的距离都算完
6. step.6—统计K-最近邻样本中每个类标号出现的次数
7. step.7—选择出现频率最大的类标号作为未知样本的类标号

案例分析

首先一个CNN算法

from numpy import *  
import operator  

def createDataSet():  
    group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])  
    labels = ['A','A','B','B']  
    return group,labels  

def classify0(inX,dataSet,labels,k):  
    dataSetSize = dataSet.shape[0]  
    diffMat = tile(inX,(dataSetSize,1)) - dataSet  
    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]]  
        classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1  
    sortedClassCount = sorted(classCount.iteritems(),  
                              key=operator.itemgetter(1),reverse=True)  
    return sortedClassCount[0][0] 

测试算法:

#! /usr/bin/env python
# -*- coding: utf-8 -*-
from numpy import *
from os import listdir
import KNN
from numpy.core import multiarray



def img2vector(filename):
    '图像文件转换成矩阵'
    returnVect = zeros((1,1024))
    fr = open(filename)
    for i in range(32):             #将32行合并成一行
        lineStr = fr.readline()
        for j in range(32):
            returnVect[0,32*i+j] = int(lineStr[j])
    return returnVect               #一个样本最终成为一个1*1024的向量


def handwritingClassTest():
    '手写识别测试函数,调用了KNN模块的KNN分类器函数'
    hwLabels = []
    trainingFileList = listdir('trainingDigits')
    m = len(trainingFileList)
    trainingMat = zeros((m,1024))
    for i in range(m):
        fileNameStr = trainingFileList[i]
        fileStr = fileNameStr.split('.')[0]
        classNumStr = int(fileStr.split('_')[0])
        hwLabels.append(classNumStr)
        trainingMat[i,:] = img2vector('trainingDigits/%s' % fileNameStr)

    testFileList = listdir('testDigits')
    errorCount = 0.0
    mTest = len(testFileList)
    for i in range(mTest):
        fileNameStr = testFileList[i]
        fileStr = fileNameStr.split('.')[0]
        classNumStr = int(fileStr.split('_')[0])
        vectorUnderTest = img2vector('testDigits/%s' % fileNameStr)
        classifierResult = KNN.classify0(vectorUnderTest, trainingMat, hwLabels, 3)
        print "in #%d, the classifier came back with: %d, the real answer is: %d" % (i, classifierResult, classNumStr)
        if (classifierResult != classNumStr):
            errorCount += 1.0
    print "\nthe total number of errors is: %d" % errorCount
    print "\nthe total error rate is: %f" % (errorCount/float(mTest))

handwritingClassTest()

源码下载地址:

源码下载地址

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/BaiHuaXiu123/article/details/72662828

[人工智能]深度学习卷积神经网络的秒懂各种操作

作者:深度学习思考者来给大家总结一下卷积神经网络的各种操作 ,大家能够秒懂!先来几个静态图: 卷积算法的一些神奇GIF动画,包括不同的padding和strides。 上述...
  • BaiHuaXiu123
  • BaiHuaXiu123
  • 2017-05-15 18:49:10
  • 5162

[机器学习]AI算法系列代码片段整理

前言接下整理一系列机器学习代码片段,敬请关注:第一部分 Python框架片段第二部分 机器学习系列片段第三部分 深度学习系列片段第四部分 机器学习案例第五部分 深度学习型案例第六部分 项目常用算法片段...
  • BaiHuaXiu123
  • BaiHuaXiu123
  • 2017-10-29 19:06:45
  • 2703

【好玩的计算机视觉】KNN算法手写数字识别

OCR应用非常广泛,而且有许多方法,今天用KNN算法实现简单的0-9手写数字识别。 KNN算法是K近邻分类算法,属于机器学习中的监督学习,需要一定量的带标签的输入样本数据进行“训练”,然后就可以识...
  • littlethunder
  • littlethunder
  • 2016-06-08 20:59:30
  • 15959

[jQuery知识]jQuery之知识体系

知识体系:jQuery基础知识一jQuery之知识二-选择器[jQuery知识]jQuery之知识三-过滤器[jQuery知识]jQuery之知识四-DOM和CSS操作[jQuery知识]jQuery...
  • BaiHuaXiu123
  • BaiHuaXiu123
  • 2016-12-06 23:47:32
  • 2620

基于k近邻(KNN)的手写数字识别

最近再看Machine Learning in Action. k近邻算法这一章节提供了这一例子,本着Talk is cheap的原则,我们来实际测试一下。 简单的介绍一下k近邻算法(KNN):给定...
  • FaaronZheng
  • FaaronZheng
  • 2016-03-16 22:12:49
  • 3314

KNN--用于手写数字识别(机器学习入门笔记)

最近在看机器学习实战这本书,写下博客作为笔记以帮助记忆。一、K-近邻算法概述概括的说,K-近邻算法采用测量不同特征值之间的距离的方法进行分类。 它的工作原理是:存在一个样本数据集合,也称训练样本集,...
  • zengxyuyu
  • zengxyuyu
  • 2017-01-13 21:32:12
  • 3424

图文混排.zip

<em>刘玉刚</em>-AI-技术研究院 关注 积分1871 查看全部21个资源 VIP会员动态 0 1 2 公告 CSDN下载频道资源及相关规则调整公告V11.10 下载频道用户反馈专区 下载频道...
  • 2018年04月16日 00:00

[HTML5点滴]客户端存储那些事

客户端存储 译者:文蔺 原文:http://www.html5rocks.com/en/tutorials/offline/storage/ 客户端存储介绍本文是关于客户端存储(client...
  • BaiHuaXiu123
  • BaiHuaXiu123
  • 2017-01-18 09:05:30
  • 1033

基于SVM和KNN的手写数字的识别(分类)——小试牛刀篇

数据下载地址:http://download.csdn.net/detail/zhulf0804/9719836 这里采用的是k近邻算法(KNN)实现的手写数字识别。 python实现代码: # -*...
  • zhulf0804
  • zhulf0804
  • 2016-12-23 20:03:16
  • 1755
收藏助手
不良信息举报
您举报文章:[机器学习案例1]基于KNN手写数字识别
举报原因:
原因补充:

(最多只允许输入30个字)