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

PCA优先还是规范化优先?

共 2 个回答
高赞
时间
活跃
0

0

在执行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
实际上,这完全等同于通过减去平均值然后除以标准偏差来标准化数据。只是更方便了。我认为您应该始终这样做,除非您有充分的理由不这样做(例如,如果您想了解每个功能的差异)。
新手导航
- 社区规范
- 提出问题
- 进行投票
- 个人资料
- 优化问题
- 回答问题
0
在进行回归或分类时,预处理数据的正确(或更好)方法是什么?
上面哪个更正确,或者是“标准化”的预处理数据的方式? “标准化”是指标准化,线性缩放或其他一些技术。