在进行回归或分类时,预处理数据的正确(或更好)方式是什么?
以上哪项更正确,还是预处理数据的“标准化”方式? “标准化”是指标准化,线性缩放或其他一些技术。
答案 0 :(得分:25)
您应该在执行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
实际上,这完全等同于通过减去平均值然后除以标准偏差来标准化数据。它更方便。在我看来,你应该总是这样做,除非你有充分的理由不这样做(例如,如果你希望获取每个特征变化的差异)。
答案 1 :(得分:6)
您需要先将数据标准化始终。否则,PCA或用于减小尺寸的其他技术将产生不同的结果。
答案 2 :(得分:0)
首先将数据标准化。实际上,一些对执行PCA分析有用的R包会在执行PCA之前自动将数据标准化。 如果变量具有不同的单位或描述的特征不同,则必须进行标准化。
答案 3 :(得分:0)
答案是第三个选项,因为在执行 pca 之后,我们必须对 pca 输出进行标准化,因为整个数据将具有完全不同的标准。我们必须在 PCA 之前和之后对数据集进行归一化,因为它会更准确。
答案 4 :(得分:0)
我在 PCA 目标函数中有另一个原因。 您可以在此链接中看到详细信息吗 enter link description here 假设 X 矩阵在 PCA 之前已经归一化。