【问题标题】:Classifying handwritten digits using PCA使用 PCA 对手写数字进行分类
【发布时间】:2013-01-14 15:28:51
【问题描述】:

使用 PCA 对 handwritten digits 进行分类。训练阶段使用 200 位数字,测试阶段使用 20 位数字。

我不知道 PCA 是如何作为一种分类方法工作的。我学会了用它作为一种降维方法,我们从平均值中减去原始数据,然后计算协方差矩阵、特征值和特征向量。从那里,我们可以选择主要组件并忽略其余部分。我应该如何对一堆手写数字进行分类?如何区分不同类的数据?

【问题讨论】:

  • 您可能会发现这篇关于手写字符识别的论文很有趣。它使用 PCA 和巧妙的空间搜索缩减过程。 dspace.mit.edu/openaccess-disseminate/1721.1/71572

标签: matlab machine-learning classification pca


【解决方案1】:

如果您绘制从 PCA 获得的分数,您会看到某些类将屈服于一个集群。

简单的 R 脚本:

data <- readMat(file.path("testzip.mat"))$testzip
pca <- princomp(t(data))
plot(pca$scores)

会屈服于这样的情节:

我不能给它上色,因为 mat 文件不包含向量到数字类的结果。但是,您至少会看到一个集群,它可以帮助您将该单个类与其他类进行分类(其他的东西看起来像噪音?)。

Olivier Grisel(scikit-learn 的贡献者)也回答了您关于元优化的问题:

How to use PCA for classification?

他说这实际上是一种无监督的降维方法,但是可以用一些花哨的方法进行分类:

实际上,我在 Stéphane Mallat 的演讲:每个类都近似于仿射 流形,第一个分量为方向,质心为 偏移量和新样本通过测量距离进行分类 具有正交投影的最近流形。

谈话:https://www.youtube.com/watch?v=lFJ7KdSdy0k(很有趣 对于有简历的人)

相关论文:http://www.cmap.polytechnique.fr/scattering/

但我认为这对你来说太过分了。如果你有类标签,你可以使用任何分类器来适应 PCA 输出上的这个问题。如果没有,请选择一个基于密度的聚类,例如 DBSCAN,看看它是否找到了您在那里看到的聚类,并使用它对新图像进行分类(例如,通过与聚类均值的距离)。

【讨论】:

  • 非常感谢您的回答。那三行代码不会在 Matlab 中运行吗?
  • Np,不知道。那是R。
【解决方案2】:

是的,正如 Thomas 指出的那样,基本上 PCA 和相关技术是进行降维的工具。这个想法是通过只获取最重要的信息并将其映射到低维子空间来对抗"curse of dimensionality"。在这个子空间中,您可以使用更简单的技术对数据进行实际分类或聚类。

你可以从简单的K nearest neighborsSupport Vector Machines 来做分类。为此,您还需要数据的标签。

让我们尝试使用 kNN 的最简单的方法(不一定是最好的方法):

现在,为了执行分类,您需要另一个带有实际标签的向量。假设您有 100 个 16x16 像素的图像。在这 100 个中,您有 10 个数字“0”,10 个数字“2”等等。

拍摄图像并将其设为 1x1600 的矢量。同时创建一个带有“标签”的 100x1 向量。在matlab中是这样的:

labels = kron([0:1:9],ones(1,10))

现在将 PCA 应用于您的数据(假设每个图像是矩阵 sampleimgs 的一列 - 所以 256x100 矩阵),您也可以这样做 带 svd:

[coeff,scores]= pca(sampleimgs');

要将它们发送到您想要的低维空间(例如 R^2) - 所以只选择前两个主要成分:

   scatter(scores(:,1),scores(:,2))

现在您可以对这些应用 K-NN 并在将新传入图像newimg 发送到同一 PC 子空间后对其进行分类:

 mdl = ClassificationKNN.fit(scores(1:100,[1 2]),labels);

 %get the new image:
 newimgmap = coef(:,1:2)'*newimg
 result = predict(mdl,newimgmap)

希望对你有帮助。

【讨论】:

    【解决方案3】:

    Ding and He (2004) 表明通过 PCA 进行降维和通过 k-means 进行聚类密切相关。聚类(即无监督学习)仍然不是分类(即监督学习),但正如其他人所指出的,聚类可能有助于识别属于不同数字的数据点组。

    【讨论】:

      猜你喜欢
      • 2017-07-08
      • 1970-01-01
      • 2018-07-04
      • 2016-03-03
      • 2016-01-12
      • 2018-04-15
      • 2020-07-15
      • 2013-09-30
      • 1970-01-01
      相关资源
      最近更新 更多