手写数字数据集上不同 K 值的 KNN 方法

信息处理 图片 分类
2022-02-11 07:25:36

我们应该对不同的 K 值使用 KNN(K Nearest Neighbor)方法来对手写数字数据集进行分类。

问题是,这是我第一次想在 Matlab 中做这样的项目。有人可以解释一下我应该为这个问题做的正常步骤吗?我应该使用什么 K 值?我阅读了一些关于 KNN 方法的文章,并对该方法的工作原理有一个粗略的了解,但我需要帮助才能做到这一点,并且能够解决我们在此之后应该做的以下问题。

1个回答

k-NN算法本身非常简单,可以对任意维度的向量进行分类。为了回答的完整性,让我在这里写下来:

  • 存储训练集中的所有向量
  • 将每个向量的与它们一起存储
  • 当一个新的、未分类的向量到达时,将其与训练集中的所有向量进行比较
  • 选择k与新邻居距离最小的邻居
  • 分配给新向量的类是其中最常见的类k最近的向量

现在,也就是说,价值k你的选择很大程度上取决于你的训练集的大小。例如,如果你有一个大小的训练集100, 并设置k=100,结果将始终相同,等于训练集中出现频率最高的类。如果你设置k=1,新的向量每次都会被归类为几何上最接近的向量(欧几里得距离)。

如果你只是想呈现不同的结果k为了讨论和学习,我建议你从k=1并测试所有k的顺序:它将制作一个漂亮的图表和一个很好的分析。也许你可以跳过偶数值k(为了k=2,如果你得到两个不同的类作为最接近的,你无法做出决定)。

真正重要的是你将如何塑造你的描述向量描述符向量中的每个组件都是您以数字方式描述的特征,应该能够帮助您做出决定。您还需要担心维度的诅咒:向量具有的分量越多,决策过程就越慢。

您在这里有两种方法:

  • 仔细决定那些被证实擅长这项任务的功能(做一些研究),并将自己限制在一定数量内。
  • 使用您认为很好的功能,但不要太担心它们有多好。然后,当您有大量特征时,使用诸如主成分分析 (PCA)Fisher 线性判别 (FLD) 之类的方法来降低k-NN 之前描述符向量的维数

最后,让我给你一些关于你可能想要用来形成你的特征向量的特征的想法。我不保证其中任何一个,我只是在脑海中写下想法:

  • 将样本图像下采样(缩小)到3×3或者3×4像素黑白图像,并将所有 9 或 12 个像素的 0/1 值作为特征。在缩小图像之前,您可能需要进行形态学分析或获取笔画的骨架。

  • 而不是从下采样图像中获取每个像素,您可以只计算下采样图像中每一行和每一列中的背景/前景像素的计数,总共有 6 或 7 个非二进制特征,而不是 9 或12 个二进制数。

  • 计算(二值化)图像中的孔数。“洞”是指未连接到图像边框的背景像素的连接组件。

  • 采取一个简单的度量,例如描述对象的伸长率,例如两个水平最远像素之间的水平距离除以两个垂直最远像素之间的垂直距离。

  • 使用Hu 的一组不变的图像时刻维基百科文章)这是非常古老的工作,但我在学习期间制作字母识别项目时使用过它们,对于诸如此类的简单用途,它们仍然很有帮助。