手写体辨识
手写体文本辨识问题可以追溯到第一代从手写体文档中识别单个字符的自动化机器。例如,你可以想象这样一个场景:邮局里信件堆积如山,因此需要借助自动化手段识别五位邮政编码,而只有正确识别,才能实现自动化和高效地分拣邮件。面对该应用场景,你可能想到多种应用,其中也许会有OCR(Optical Character Recognition,光学字符识别)软件,它读入手写体或印刷体文本,识别其中的文字后,生成常用的电子文档。
手写体识别问题还可以继续向前追溯,更准确地说可以追溯到20世纪20年代,即Emanuel Goldberg开始着手研究这个问题的时候。它当时提出了统计方法可能是最佳的选择。
scikit-learn库提供了一个很棒的例子,便于我们更好地理解手写体识别技术、相关问题以及用机器学习方法识别文本的可能性。
用scikit-learn库识别手写体数字
用scikit-learn库分析这类数据所用的方法,跟我们前面使用的数据集其实是有所不同的。带分析数据不仅涉及数值或字符串类型的处理,还涉及图像和声音文件的处理。
因此,我们可以将我们要面对的问题看作是读取和解释手写体数字图像,预测图像之中的数值。
这类数据分析问题,需要用到估计器(estimator)。它借助fit( )函数进行学习,待自己的预测能力(模型足够有效)达到一定水准后,再用predict( )函数给出预测结果。拿到结果之后,我们还会讨论训练集和验证集。与之前不同,这两个数据集是由一系列图像组成的。
这个例子可以用sklearn.svm.SVC估计器,它使用的是SVC技术。
因此,我们需要导入scikit-learn库的svm模块。接着,创建SVC类型的估计器,并初始化设置。无需为C和gamma选项设置特殊值,使用一般值即可,分析过程中可再做调整。
Digits数据集
我们之前就提过,scikit-learn库提供了大量的数据集,可用于测试数据分析相关的问题和结果预测问题。其中,对于这里要说的手写体数字识别问题,我们可以使用它的Digits图像数据集。
该数据集包含了1797张8x8像素大小的灰度图,图像的内容为一个手写体数字。首先我们先导入Digits数据集,加载数据集后,对它里面的内容略作分析。首先,我们访问DESCR属性,读取数据集自带的大量说明:
手写体数字图像的数据,则存储在digits.image数组中。数组中的每个元素表示一张图像,每个元素为8x8形状的矩阵,矩阵各项为数值类型,每个数值对应一种灰度等级,其中0对应白色,15对应黑色。
可以借助于matplotlib库为数组元素生成图像,这样我们看起来会更加直观。
图像所表示的数字,也就是目标值,则存储在digits.targets数组之中。
这样我们就可以得到我们的目标识别值啦。下面一节中,我们将更为具体地讲解如何将其用于学习以及预测中。
领取专属 10元无门槛券
私享最新 技术干货