【P19 机器学习-分类算法及应用实践】手写数字识别(KNN)

手写字识别

  • 1 手写字的识别 (KNN)
    • 1.1 读取训练集
    • 1.2 读取测试集
    • 1.3 完整程序

1 手写字的识别 (KNN)

通过0,1二值化把手写数字,变化成矩阵

32*32

1.1 读取训练集

python 复制代码
import numpy as np 
from os import listdir  # 读取文件夹下的所有文件,形成一个文件列表

# 图片转矩阵
def img2vector(filename):
    returnVect = np.zeros((1,1024)) # 每个图片矩阵32*32,存为1行
    fr = open(filename)
    for i in range(32):
        lineStr = fr.readline()
        for j in range(32):
            returnVect[0,32*i+j] = int(lineStr[j])
    return returnVect

#读取数据
hwLabels = []
trainingFileList = listdir('E:\\Progarm\\Py_Program\\HandwritingRecognition\\trainingDigits')
m = len(trainingFileList)
trainingMat = np.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('E:\\Progarm\\Py_Program\\HandwritingRecognition\\trainingDigits\\%s' % fileNameStr)
python 复制代码
print(trainingFileList)
print(hwLabels)
print(trainingMat)



1.2 读取测试集

python 复制代码
# 读取测试集,执行KNN分类
testFileList = listdir('E:\\Progarm\\Py_Program\\HandwritingRecognition\\testDigits')
k = 3
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('E:\\Progarm\\Py_Program\\HandwritingRecognition\\testDigits\\%s' % fileNameStr)
    classifierResult = K.knn(vectorUnderTest,trainingMat,hwLabels,k)
    print('KNN识别的结果是: %d , 实际是: %d' % (classifierResult,classNumStr))
    if classifierResult != classNumStr:
        errorCount +=1.0
python 复制代码
print('训练集数量: %d ,测试集数量: %d' % (m,mTest))
print('错误识别数 : %d , 正确率 : %f ' % (errorCount , (1-errorCount/float(mTest))*100))

1.3 完整程序

python 复制代码
import numpy as np 
from os import listdir # 读取文件夹下的所有文件
import knn as K

# 图片转矩阵
def img2vector(filename):
    returnVect = np.zeros((1,1024)) # 每个图片矩阵32*32,存为1行
    fr = open(filename)
    for i in range(32):
        lineStr = fr.readline()
        for j in range(32):
            returnVect[0,32*i+j] = int(lineStr[j])
    return returnVect

#读取训练集数据
hwLabels = []
trainingFileList = listdir('E:\\Progarm\\Py_Program\\HandwritingRecognition\\trainingDigits')
m = len(trainingFileList)
trainingMat = np.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('E:\\Progarm\\Py_Program\\HandwritingRecognition\\trainingDigits\\%s' % fileNameStr)


#print(trainingFileList)
#print(hwLabels)
#print(trainingMat)


# 读取测试集,执行KNN分类
testFileList = listdir('E:\\Progarm\\Py_Program\\HandwritingRecognition\\testDigits')
k = 3
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('E:\\Progarm\\Py_Program\\HandwritingRecognition\\testDigits\\%s' % fileNameStr)
    classifierResult = K.knn(vectorUnderTest,trainingMat,hwLabels,k)
    print('KNN识别的结果是: %d , 实际是: %d' % (classifierResult,classNumStr))
    if classifierResult != classNumStr:
        errorCount +=1.0
  
print('训练集数量: %d ,测试集数量: %d' % (m,mTest))
print('错误识别数 : %d , 正确率 : %f ' % (errorCount , (1-errorCount/float(mTest))*100))
相关推荐
2zcode几秒前
基于深度学习的糖尿病眼底图像分类识别系统(含UI界面+多模型对比+数据集+训练代码)
人工智能·深度学习·分类
xingpanvip几秒前
星盘接口开发文档:组合三限盘接口指南
android·开发语言·前端·python·php·lua
绛橘色的日落(。・∀・)ノ1 分钟前
机器学习 梯度下降
人工智能·机器学习
vortex542 分钟前
Villain:新一代轻量级 C2 框架完整使用指南
python·网络安全·kali·c2
小何code1 小时前
人工智能【第11篇】K近邻算法KNN:简单有效的分类方法(长文+代码实现)
人工智能·机器学习·knn
测试员周周1 小时前
【AI测试系统】第5篇:AI 编码工具抛硬币?我们用 LangGraph 做了个“确定性+AI”的测试系统(附自愈架构)
人工智能·python·功能测试·测试工具·架构·langchain·单元测试
Levin__NLP_CV_AIGC1 小时前
py文件中文件复制方法
开发语言·python
AI木马人1 小时前
18.人工智能实战:LoRA 微调后效果不升反降?从数据清洗到训练参数的完整排查方案
人工智能·深度学习·机器学习
庚昀◟1 小时前
腾讯云 CVM + Docker + Jenkins + GitLab CI/CD 全流程指南(python、flask实现简单计算器)
python·ci/cd·docker·flask·jenkins
H_unique1 小时前
LangChain:创建工具Ⅰ
python·langchain