23

在进行回归或分类时,预处理数据的正确(或更好)方法是什么?

  1. 规范化数据 -> PCA -> 训练
  2. PCA -> 标准化 PCA 输出 -> 训练
  3. 规范化数据 -> PCA -> 规范化 PCA 输出 -> 训练

以上哪个更正确,或者是预处理数据的“标准化”方式?“标准化”是指标准化、线性缩放或其他一些技术。

4

5 回答 5

27

您应该在进行 PCA 之前对数据进行规范化。例如,考虑以下情况。我创建了一个X具有已知相关矩阵的数据集C

>> C = [1 0.5; 0.5 1];
>> A = chol(rho);
>> X = randn(100,2) * A;

如果我现在执行 PCA,我会正确地发现主成分(权重向量的行)与坐标轴成一定角度:

>> wts=pca(X)
wts =
    0.6659    0.7461
   -0.7461    0.6659

如果我现在将数据集的第一个特征缩放 100,直觉上我们认为主成分不应该改变:

>> Y = X;
>> Y(:,1) = 100 * Y(:,1);

但是,我们现在发现主成分与坐标轴对齐:

>> wts=pca(Y)
wts =
    1.0000    0.0056
   -0.0056    1.0000

要解决此问题,有两种选择。首先,我可以重新调整数据:

>> Ynorm = bsxfun(@rdivide,Y,std(Y))

(奇怪的bsxfun符号用于在 Matlab 中进行向量矩阵算术 - 我所做的只是减去平均值并除以每个特征的标准差)。

我们现在从 PCA 中得到了合理的结果:

>> wts = pca(Ynorm)
wts =
   -0.7125   -0.7016
    0.7016   -0.7125

它们与原始数据上的 PCA 略有不同,因为我们现在已经保证我们的特征具有单位标准偏差,而最初情况并非如此。

另一种选择是使用数据的相关矩阵而不是外积来执行 PCA:

>> wts = pca(Y,'corr')
wts =
    0.7071    0.7071
   -0.7071    0.7071

事实上,这完全等同于通过减去均值然后除以标准差来标准化数据。只是更方便。在我看来,您应该始终这样做,除非您有充分的理由不这样做(例如,如果您了解每个功能变化的差异)。

于 2012-04-12T08:55:59.670 回答
7

您需要首先对数据进行标准化。否则,用于减少维度的 PCA 或其他技术将给出不同的结果。

于 2012-04-12T08:26:48.680 回答
0

首先规范化数据。实际上,一些用于执行 PCA 分析的 R 包会在执行 PCA 之前自动标准化数据。如果变量具有不同的单位或描述不同的特征,则必须进行标准化。

于 2020-04-05T04:29:14.303 回答
0

答案是第三个选项,因为在执行 pca 之后,我们必须标准化 pca 输出,因为整个数据将具有完全不同的标准。我们必须在 PCA 之前和之后对数据集进行标准化,因为它会更准确。

于 2021-02-28T08:38:52.567 回答
0

我在 PCA 目标函数中得到了另一个原因。您是否可以在此链接中看到详细信息,请在 此处输入链接描述 假设 X 矩阵在 PCA 之前已被归一化。

于 2021-07-23T07:34:41.450 回答