PCA第一或正常化第一?(PCA first or normalization first?)

2019-06-23 13:48发布

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

  1. 规范化数据 - > PCA - >培训
  2. PCA - >正常化PCA输出 - >培训
  3. 规范化数据 - > PCA - >正常化PCA输出 - >培训

这上面是比较正确,或者说是“标准化”的方式对数据进行预处理? 所谓“正常化”我的意思是要么标准化,线性缩放或一些其他技术。

Answer 1:

做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

事实上,这是完全等效于减去平均值,然后通过标准偏差除以标准化的数据。 这只是更方便。 在我看来,你应该总是这样做,除非你有一个很好的理由不(例如,如果你拿起每个要素的变化差异)。



Answer 2:

首先,您需要永远标准化数据。 否则,用于减少尺寸PCA或其他技术会产生不同的结果。



文章来源: PCA first or normalization first?