【问题标题】:PCA first or normalization first?先进行 PCA 还是先归一化?
【发布时间】:2012-04-24 13:59:24
【问题描述】:

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

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

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

【问题讨论】:

    标签: machine-learning normalization classification regression pca


    【解决方案1】:

    我在 PCA 目标函数中找到了另一个原因。 您可以在此链接中查看详细信息吗 enter link description here 假设 X 矩阵在 PCA 之前已经被归一化。

    【讨论】:

    • 请对您的回答进行详细的解释,以便下一个用户更好地理解您的回答。此外,请提供链接内容的基本介绍,以防将来停止工作。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        >> 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
        

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

        【讨论】:

        • “你应该在做 PCA 之前对数据进行标准化”。它是标准化还是标准化或两者中的任何一个?如果不标准化,为什么不呢?谢谢。
        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-04-20
          • 1970-01-01
          • 1970-01-01
          • 2020-03-28
          • 1970-01-01
          • 1970-01-01
          • 2014-09-28
          • 2020-05-06
          相关资源
          最近更新 更多