
手写数字识别的机器学习方法讨论
KNN算法: 好多样本(比如500个),每个样本存了一个0和1描述的矩阵(一般的数字图片可经过预处理(二值化,平滑去噪归一化)等方式变成类似的存储结构),类似下图,并告诉该样本是数字几。
然后我们在程序中,把这个矩阵变成一行向量,然后把这500个样本的行向量存到一个矩阵或者哈希表中。
然后我们取一个需要判别数字的样本,把它的矩阵也变成行,然后循环分别求它跟上面500个样本行的欧式距离。求出来去距离最小的K个样本,然后判断在这 K个样本种,哪种数字最多,就判断该待测样本是什么数字。
优点:思路简单。 缺点:存储空间大,计算时间长。
决策树:有好多种针对数字识别的建立决策树的方法,根据不同特征分类,下面是一个我觉得比较可行的方法 .html
(基于决策树的手写数字的识别 Handwritten Numeral Recognition Based On Decis.)
原理是图像用灰度图或者二值图表示,经过一系列降噪,剪裁之后,将原图切分成矩阵小图,比如3*5的小图。然后分别求这15个小图的密度特征(1-10)。这样每一个原始的大图就具有了15个特征属性。 这里 决策树的 属性 变量是数字型,可以使用>= 或者<=来作为分隔条件。这样在每一步分割的时候,需要分别遍历剩余属性点的1-10中所有的点,选一个熵增益最大的当做当前分割点。 这样分割,每一次都能判别出一个数字的类别。 比如第一次判断的时候,发现用第2块小图的密度,以密度为5作为分割,这时的熵是最大的。所以做一次分割,分割后,左右两边,右边仍然是杂乱无章的,而明显左边大部分的数字类别都是数字1(可以定义个阈值或者投票)。认为此次分割分离出了1. 。。。 然后依次类推。。直到第10次分割,就认为吧所有的0-9的数字都区分了。
然后代入待测样本的密度,根据决策树就能找到对应的数字类别。
SVM 在有限小样本的情况下非常实用。 其实总体思路跟决策树差不多,
.html
神经网络 差不多,暴力计算。没试过。