首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PCA优先还是归一化优先?

PCA优先还是归一化优先?
EN

Stack Overflow用户
提问于 2012-04-12 16:20:56
回答 4查看 27.1K关注 0票数 23

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

标准化data -> PCA ->训练

PCA ->归一化PCA输出->训练

归一化数据-> PCA ->归一化PCA输出->训练

以上哪一项更正确,还是预处理数据的“标准化”方法?所谓“标准化”,我指的是标准化、线性缩放或其他一些技术。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-04-12 16:56:00

在进行PCA之前,您应该对数据进行归一化。例如,考虑以下情况。我创建了一个数据集

具有已知的相关矩阵

代码语言:javascript
运行
复制
>> C = [1 0.5; 0.5 1];
>> A = chol(rho);
>> X = randn(100,2) * A;

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

代码语言:javascript
运行
复制
>> wts=pca(X)
wts =
    0.6659    0.7461
   -0.7461    0.6659

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

代码语言:javascript
运行
复制
>> Y = X;
>> Y(:,1) = 100 * Y(:,1);

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

代码语言:javascript
运行
复制
>> wts=pca(Y)
wts =
    1.0000    0.0056
   -0.0056    1.0000

要解决此问题,有两个选项。首先,我可以重新缩放数据:

代码语言:javascript
运行
复制
>> Ynorm = bsxfun(@rdivide,Y,std(Y))

(怪异的

在Matlab中,符号是用来做向量矩阵算术的--我所做的就是减去平均值,再除以每个特征的标准差)。

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

代码语言:javascript
运行
复制
>> wts = pca(Ynorm)
wts =
   -0.7125   -0.7016
    0.7016   -0.7125

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

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

代码语言:javascript
运行
复制
>> wts = pca(Y,'corr')
wts =
    0.7071    0.7071
   -0.7071    0.7071

实际上,这完全等同于通过减去平均值,然后除以标准差来标准化数据。只是更方便而已。在我看来,你应该

始终

除非你有很好的理由不这样做(例如,如果你

想要

以拾取每个特征的变化中的差异)。

票数 26
EN

Stack Overflow用户

发布于 2012-04-12 16:26:49

您需要先对数据进行规范化

始终

..。否则,PCA或其他用于降维的技术将给出不同的结果。

票数 7
EN

Stack Overflow用户

发布于 2020-04-05 12:29:14

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10119913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档