将 PCA 应用于一维数组

Applying PCA to one-dimensional array

我的大学项目要求我分析、讨论和改进现有的图像人脸识别实现。

作为输入数据,我得到了 n*m 矩阵,其中:

看起来像:

[[254. 254. 236. ...  15.  20.  21.]
 [ 49.  55.  61. ...  57.  69.  60.]
 [129. 137. 159. ...  15.  15.  15.]
 ...
 [ 44.  49.  60. ...   7.   8.   8.]
 [229. 221. 201. ...  16.  16.  16.]
 [120. 116. 112. ...   7.   7.   7.]]

在给定示例的某个时刻,在训练模型之前,将此数据应用于 PCA(主成分分析)以计算其主成分并降低维度。

pca = PCA(n_components=200, whiten=True).fit(X_train)
X_train_pca = pca.transform(X_train)

PCA 将矩阵的形状从 1500*5236 更改为 1500*200。在后面的部分,我们使用 MLPClassifier 来测试准确性,从上面的代码接收到的数据使模型非常准确。

然而,在互联网上,我只看到了将 n*m 矩阵维数减少到(例如)n*1[=32 的例子=].我不知道将此算法应用于一维数组是否是一个好方法,我还没有找到任何例子。

我是否应该将每个图像重塑回矩阵,然后在其上应用 PCA? 或者只是保持原样? 这是一个好方法吗? 在我的情况下,也许有一些 PCA 的替代品?

However, on the internet, I've seen only examples with decreasing nm matrixes dimension to (for example) n1. I don't know if applying this algorithm to just a one-dimensional array is a good approach, I haven't found any example of that.

您没有将 PCA 应用于一维数组。您将其应用于 1500 x 5236 的二维矩阵并将其缩小为 1500 x 200;这正是您在网上看到的 -> 二维矩阵缩减为更小的特征 space。在线教程通常会以极端的方式(例如 1500 x 2)这样做,因为 PCA 的主要用途之一是数据 可视化 并且绘制任何超过 2dims 的东西都是......很难;)

Should I instead reshape each image back into the matrix, and then apply PCA on it?

不,似乎对矩阵是什么感到困惑。你的 整个 数据是矩阵,如果你有图片,你最终会得到 3d 张量,而不是矩阵。按照传统定义,PCA 只能应用于二维矩阵。

Or just left it as it is? Is it a good approach at all? Maybe there are some alternatives for PCA in my case?

PCA 只是一个 heuristic regularisation technique。您正在从数据中删除信息,以避免过度拟合。绝对不能保证它会起作用或有所帮助。还有许多其他的正则化技术可以尝试:

  • 正则化损失,例如重量衰减
  • 网络本身的规则,例如辍学
  • 数据本身的正则化,例如“数据增强”(在不影响最终标签的情况下对图片进行轻微的训练,例如旋转等)
  • 以指定损失的方式进行正则化,例如通过软标签或混合。