k近邻算法识别手写数字Python实现

数据集:(参见python实战教程)

训练数据:trainingDigits 2000多个.txt文件

测试数据:testDigits  约900个.txt文件

均为32*32大小

test_handWritting.py:

from numpy import *
import os
import knnOperator
import pdb

def img2vector(filename,d): #d=32
    returnVector = zeros((1,d*d))
    fr = open(filename)
    for i in range(d):
        linstr = fr.readline()
        for j in range(d):
            returnVector[0,i*d+j] = int(linstr[j])
    return returnVector
    
def handwritingClassTest(filepath,d):
    trainFilePath = filepath + 'trainingDigits\\'
    trainFileList = os.listdir(trainFilePath)
    nTrain = len(trainFileList)
    trainData = zeros((nTrain,d*d))
    trainlabels = []
    for i in range(nTrain):
        trainFilei = trainFileList[i]
        trainFileName = trainFilePath + trainFilei
        vector = img2vector(trainFileName,d)
        trainData[i,:] = vector
        trainFileClass = trainFilei.split('_')[0]
        trainlabels.append(trainFileClass)
       
    testFilePath = filepath + 'testDigits\\'
    testFileList = os.listdir(testFilePath)
    nTest = len(testFileList)
    k = 4
    count = 0
    for j in range(nTest):
        #pdb.set_trace()
        testFilej = testFileList[j]
        testFileName = testFilePath + testFilej
        testSample = img2vector(testFileName,d)
        test_label = knnOperator.knnOperator(testSample,trainData,trainlabels,k)
        truth_label = testFilej.split('_')[0]
        if (truth_label == test_label):
            count += 1
    rate = float(count) / float(nTest)
    print rate

knnOperator函数参见: http://blog.csdn.net/u013593585/article/details/51284537

主实现:

import test_handWritting
filepath = 'E:\\ZForWorks\\MLPython\\knn\\digits\\'
d = 32
handwritingClassTest(filepath,d)
准确率:98.3%



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值