• 大小: 818KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-19
  • 语言: 其他
  • 标签: knn  

资源简介

KNN手写识别代码及样本集,样本集来自

资源截图

代码片段和文件信息

# -*- coding: utf-8 -*-
‘‘‘
Created on Sep 16 2010
kNN: k Nearest Neighbors

Input:      inX: vector to compare to existing dataset (1xN)
            dataSet: size m data set of known vectors (NxM)
            labels: data set labels (1xM vector)
            k: number of neighbors to use for comparison (should be an odd number)

Output:     the most popular class label

@author: pbharrin
‘‘‘
from numpy import *
import operator
from os import listdir
def classify0(inX dataSet labels k):
    #采用KNN判断类别
    dataSetSize = dataSet.shape[0]#计算训练样本样本数
    diffMat = tile(inX (dataSetSize1)) - dataSet
    sqDiffMat = diffMat**2
    sqDistances = sqDiffMat.sum(axis=1)
    distances = sqDistances**0.5#以上4行计算距离
    sortedDistIndicies = distances.argsort()#对距离计算结果进行排序,默认为升序
    classCount={}
    for i in range(k):#计算最近K个距离所属类别
        voteIlabel = labels[sortedDistIndicies[i]]
        classCount[voteIlabel] = classCount.get(voteIlabel0) + 1
    sortedClassCount = sorted(classCount.iteritems() key=operator.itemgetter(1) reverse=True)#得到最后的类别
    return sortedClassCount[0][0]
    
def img2vector(filename):
    #从text文本中读取数据
    returnVect = zeros((11024))
    fr = open(filename)
    for i in range(32):
        lineStr = fr.readline()
        for j in range(32):
            returnVect[032*i+j] = int(lineStr[j])
    return returnVect
    
def handwritingClassTest():
    hwLabels = []
    trainingFileList = listdir(‘trainingDigits‘)           #加载训练集
    m = len(trainingFileList)
    trainingMat = zeros((m1024))
    for i in range(m):
        fileNameStr = trainingFileList[i]
        fileStr = fileNameStr.split(‘.‘)[0]     #去掉.txt后缀名
        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]     #去掉.txt后缀名
        classNumStr = int(fileStr.split(‘_‘)[0])
        vectorUnderTest = img2vector(‘testDigits/%s‘ % fileNameStr)
        classifierResult = classify0(vectorUnderTest trainingMat hwLabels 3)#采用最邻近算法进行分类
        print “the classifier came back with: %d the real answer is: %d“ % (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()

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2016-10-26 21:50  第一章_KNN\
     文件        2834  2016-10-26 20:24  第一章_KNN\kNN.py
     文件        3840  2016-10-26 21:48  第一章_KNN\KNN_digits.m
     目录           0  2016-10-26 21:39  第一章_KNN\testDigits\
     文件        1088  2010-10-07 21:35  第一章_KNN\testDigits\0_0.txt
     文件        1088  2010-10-07 21:35  第一章_KNN\testDigits\0_1.txt
     文件        1088  2010-10-07 21:35  第一章_KNN\testDigits\0_10.txt
     文件        1088  2010-10-07 21:35  第一章_KNN\testDigits\0_11.txt
     文件        1088  2010-10-07 21:35  第一章_KNN\testDigits\0_12.txt
     文件        1088  2010-10-07 21:35  第一章_KNN\testDigits\0_13.txt
     文件        1088  2010-10-07 21:35  第一章_KNN\testDigits\0_14.txt
     文件        1088  2010-10-07 21:35  第一章_KNN\testDigits\0_15.txt
     文件        1088  2010-10-07 21:35  第一章_KNN\testDigits\0_16.txt
     文件        1088  2010-10-07 21:35  第一章_KNN\testDigits\0_17.txt
     文件        1088  2010-10-07 21:35  第一章_KNN\testDigits\0_18.txt
     文件        1088  2010-10-07 21:35  第一章_KNN\testDigits\0_19.txt
     文件        1088  2010-10-07 21:35  第一章_KNN\testDigits\0_2.txt
     文件        1088  2010-10-07 21:35  第一章_KNN\testDigits\0_20.txt
     文件        1088  2010-10-07 21:35  第一章_KNN\testDigits\0_21.txt
     文件        1088  2010-10-07 21:35  第一章_KNN\testDigits\0_22.txt
     文件        1088  2010-10-07 21:35  第一章_KNN\testDigits\0_23.txt
     文件        1088  2010-10-07 21:35  第一章_KNN\testDigits\0_24.txt
     文件        1088  2010-10-07 21:35  第一章_KNN\testDigits\0_25.txt
     文件        1088  2010-10-07 21:35  第一章_KNN\testDigits\0_26.txt
     文件        1088  2010-10-07 21:35  第一章_KNN\testDigits\0_27.txt
     文件        1088  2010-10-07 21:35  第一章_KNN\testDigits\0_28.txt
     文件        1088  2010-10-07 21:35  第一章_KNN\testDigits\0_29.txt
     文件        1088  2010-10-07 21:35  第一章_KNN\testDigits\0_3.txt
     文件        1088  2010-10-07 21:35  第一章_KNN\testDigits\0_30.txt
     文件        1088  2010-10-07 21:35  第一章_KNN\testDigits\0_31.txt
     文件        1088  2010-10-07 21:35  第一章_KNN\testDigits\0_32.txt
............此处省略2854个文件信息

评论

共有 条评论