机器学习笔记1---knn实践篇 数字识别

本文介绍了一种将手写数字的文本图像转换为向量并进行识别的算法。通过读取训练集和测试集文件夹中的32*32大小的数字图像,将其转化为向量形式,再利用分类器进行预测。实验结果显示,该方法能够准确预测大部分手写数字,但存在一定的错误率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文本为测试集和训练集两个文件夹,里面文件命名为0_0.txt(为数字0的第0个实例)。里面为32*32的数字

1.将文本转为向量

def img2vector(filename):
    returnvect = zeros((1,1024))
    with open(filename,"r") as f:
        lines = f.readlines()
        for i in range(32):
            for j in range(32):
                returnvect[0,32*i+j] = int(lines[i][j])
        return returnvect

 

2.识别

def handwritingclassTest():
    lables = []
    trainfileList = os.listdir('trainingDigits')
    trainSize = len(trainfileList)
    trainMat = zeros((trainSize, 1024))
    for i in range(trainSize):
        lable = trainfileList[i].split('_')[0]
        lables.append(lable)
        trainMat[i,:] = img2vector("trainingDigits/"+trainfileList[i])
    testfileList = os.listdir('testDigits')
    errorCount = 0.0
    testSize = len(testfileList)
    for i in range(testSize):
        testMat =img2vector("testDigits/"+testfileList[i])
        Result = classify0(testMat,trainMat, lables, 2)
        testlable = testfileList[i].split('_')[0]
        print("predict:"+Result+",real:"+testlable)
        if Result!=testlable:
            errorCount += 1
    rate = errorCount/testSize
    print("errorrate:"+str(rate))

问题:运行时一直显示读文件时an integer is required (got type str),最后找到原因是在引用os模块时,引用方式为from os import *,改为import os就好了。

缺点:耗时,无法给出任何数据的基础结构信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值