PCA优先还是规范化优先?
classification
machine-learning
regression
10
0

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

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

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

参考资料:
Stack Overflow
收藏
评论
共 2 个回答
高赞 时间 活跃

您需要始终首先对数据进行规范化。否则,PCA或其他用于减小尺寸的技术将给出不同的结果。

收藏
评论

在执行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

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

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号