在做回归或分类,什么是正确的(或更好)的方式对数据进行预处理?
- 规范化数据 - > PCA - >培训
- PCA - >正常化PCA输出 - >培训
- 规范化数据 - > PCA - >正常化PCA输出 - >培训
这上面是比较正确,或者说是“标准化”的方式对数据进行预处理? 所谓“正常化”我的意思是要么标准化,线性缩放或一些其他技术。
在做回归或分类,什么是正确的(或更好)的方式对数据进行预处理?
这上面是比较正确,或者说是“标准化”的方式对数据进行预处理? 所谓“正常化”我的意思是要么标准化,线性缩放或一些其他技术。
做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
事实上,这是完全等效于减去平均值,然后通过标准偏差除以标准化的数据。 这只是更方便。 在我看来,你应该总是这样做,除非你有一个很好的理由不(例如,如果你想拿起每个要素的变化差异)。
首先,您需要永远标准化数据。 否则,用于减少尺寸PCA或其他技术会产生不同的结果。