机器学习实战(4)—— kNN实战手写识别系统

我:终于到周末了,可以休息一下了!!!来几把LOL!!!

(叮铃…叮铃…叮铃…)

我:喂,老板啊?怎么啦

老板:小韩啊,在家休息吗?

我:是啊。

老板:别休息啦,来加个班,用上次你写的kNN,做一个手写识别系统,训练集和测试集我都发你邮箱了!周日晚上给我!

我:(What???大周末的,你让我加班,老子不干了!)行,保证写出来!

行了行了,周末不休息了,开工!

这次我们要构建一个手写识别系统,为了简单,我们就只识别0-9。需要识别的数字已经用图形处理软件,处理成具有相同的色彩和大小:宽高是32像素×32像素的黑白图像。尽管采用文本格式存储图像不能有效地利用内存空间,但是为了方便我们的理解,我们还是将图像转换为文本格式。示例如下:

然后,我们来看一下,使用kNN构造手写识别系统的步骤:

  1. 收集数据:提供文本文件。
  2. 准备数据:编写函数classify0(),将图像格式转换为分类器使用的list格式。
  3. 分析数据:在Python命令提示符中检查数据,确保它符合要求。
  4. 训练算法:此步骤不适用于k-近邻算法。
  5. 测试算法:编写函数使用提供的部分数据集作为测试样本,测试样本与非测试样本的区别在于测试样本是已经完成分类的数据,如果预测分类与实际类别不同,则标记为一个错误。
  6. 使用算法:本例没有完成此步骤,若你感兴趣可以构建完整的应用程序,从图像中提取数字,并完成数字识别,美国的邮件分拣系统就是一个实际运行的类似系统。

2.3.1 准备数据:将图像转换为测试向量

老板给的训练集在目录trainingDigits中,其中包含了大约2000个例子,每个数字大概有200个样本。测试集在目录testDigits中,其中大约900个测试数据。截图如下:

每个文本文件名称下划线前的数字代表这个文本文件所代表数字。比如说0_8.txt代表的是数字0的第9个样本(从0开始计数)。

为了使用我们先前编写好的分类器,我们必须将图像格式化处理为一个向量。我们将一个32×32的二进制图像矩阵转换为1×1024的向量。

好了,代码走起来!我们继续在kNN.py中编写函数img2vector,代码如下:

def img2vector(filename):
    returnVect = zeros((1, 1024))
    fr = open(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值