我们应该对不同的 K 值使用 KNN(K Nearest Neighbor)方法来对手写数字数据集进行分类。
问题是,这是我第一次想在 Matlab 中做这样的项目。有人可以解释一下我应该为这个问题做的正常步骤吗?我应该使用什么 K 值?我阅读了一些关于 KNN 方法的文章,并对该方法的工作原理有一个粗略的了解,但我需要帮助才能做到这一点,并且能够解决我们在此之后应该做的以下问题。
我们应该对不同的 K 值使用 KNN(K Nearest Neighbor)方法来对手写数字数据集进行分类。
问题是,这是我第一次想在 Matlab 中做这样的项目。有人可以解释一下我应该为这个问题做的正常步骤吗?我应该使用什么 K 值?我阅读了一些关于 KNN 方法的文章,并对该方法的工作原理有一个粗略的了解,但我需要帮助才能做到这一点,并且能够解决我们在此之后应该做的以下问题。
k-NN算法本身非常简单,可以对任意维度的向量进行分类。为了回答的完整性,让我在这里写下来:
现在,也就是说,价值你的选择很大程度上取决于你的训练集的大小。例如,如果你有一个大小的训练集, 并设置,结果将始终相同,等于训练集中出现频率最高的类。如果你设置,新的向量每次都会被归类为几何上最接近的向量(欧几里得距离)。
如果你只是想呈现不同的结果为了讨论和学习,我建议你从并测试所有的顺序:它将制作一个漂亮的图表和一个很好的分析。也许你可以跳过偶数值(为了,如果你得到两个不同的类作为最接近的,你无法做出决定)。
真正重要的是你将如何塑造你的描述向量。描述符向量中的每个组件都是您以数字方式描述的特征,应该能够帮助您做出决定。您还需要担心维度的诅咒:向量具有的分量越多,决策过程就越慢。
您在这里有两种方法:
最后,让我给你一些关于你可能想要用来形成你的特征向量的特征的想法。我不保证其中任何一个,我只是在脑海中写下想法:
将样本图像下采样(缩小)到或者像素黑白图像,并将所有 9 或 12 个像素的 0/1 值作为特征。在缩小图像之前,您可能需要进行形态学分析或获取笔画的骨架。
而不是从下采样图像中获取每个像素,您可以只计算下采样图像中每一行和每一列中的背景/前景像素的计数,总共有 6 或 7 个非二进制特征,而不是 9 或12 个二进制数。
计算(二值化)图像中的孔数。“洞”是指未连接到图像边框的背景像素的连接组件。
采取一个简单的度量,例如描述对象的伸长率,例如两个水平最远像素之间的水平距离除以两个垂直最远像素之间的垂直距离。
使用Hu 的一组不变的图像时刻(维基百科,文章)这是非常古老的工作,但我在学习期间制作字母识别项目时使用过它们,对于诸如此类的简单用途,它们仍然很有帮助。