目的
采用k-近邻算法实现手写识别系统。这里采用0和1组成数字0-9的形状,再用算法对这些形状进行识别,来分辨出形状属于0-9那个数字。并计算出k-近邻算法识别手写数字的错误率。
数据说明
数据来自《机器学习实战》,分为测试集和训练集。单个数据如下图所示,表示数据0。
算法过程
收集数据:提供文本文件。
准备数据:编写函数classify0() ,将图像格式转换为分类器使用的制格式。
分析数据:在Python命令提示符中检查数据,确保它符合要求。
训练算法:此步驟不适用于k-近邻算法。
测试算法:编写函数使用提供的部分数据集作为测试样本,测试样本与非测试样本的区别在于测试样本是已经完成分类的数据,如果预测分类与实际类别不同,则标记为一个错误。
使用算法
准备数据:将图像转换为测试向量
def img2vector(filename):
"""
该函数创建1*1024的NumPy数组,然后打开给定的文件,循环读出文件的前32行。
并将每行的头32个字符值存储在NumPy数组中,然后返回数组
"""
return_vect = np.zeros((1, 1024))
fr = open(filename)
for i in range(32):
line_str = fr.readline()
for j in range(32):
return_vect[0, 32*i+j] = int(line_str[j])
return return_vect
测试算法:使用k-近邻算法识别手写数字
def hand_writing_class_test():
"""
手写数字识别系统的测试代码<