SVD / PCA 的“标准化”变量

机器算法验证 主成分分析 数据转换 正常化 降维 svd
2022-01-25 03:45:59

假设我们有个可测量变量,我们进行次测量,然后希望对结果执行奇异值分解以找到个点的最大方差轴维空间中。注意:假设的均值已经被减去,所以 for all。)N(a1,a2,,aN)M>NMNaiai=0i

现在假设一个(或多个)变量具有与其他变量显着不同的特征量级。例如范围内,而其余的值可能在左右。这将使方差最大的轴非常偏向a1101000.11a1

量级上的差异可能仅仅是因为测量单位的不幸选择(如果我们谈论的是物理数据,例如公里与米),但实际上不同的变量可能具有完全不同的维度(例如重量与体积),所以可能没有任何明显的方法可以为他们选择“可比较”的单位。

问题: 我想知道是否存在任何标准/通用方法来规范化数据以避免此问题。我对为此目的产生可比的幅度的标准技术更感兴趣,而不是想出新的东西。a1aN

编辑: 一种可能性是通过标准偏差或类似的东西对每个变量进行标准化。但是,接下来会出现以下问题:让我们将数据解释为维空间中的点云。这个点云可以旋转,这种归一化会根据旋转给出不同的最终结果(在 SVD 之后)。(例如,在最极端的情况下,想象精确旋转数据以使主轴与主轴对齐。)N

我希望不会有任何旋转不变的方法来做到这一点,但如果有人能指出我在文献中对这个问题的一些讨论,特别是关于结果解释中的警告,我将不胜感激。

4个回答

三种常见的标准化是居中、缩放和标准化。

为随机变量。X

居中是

xi=xix¯.

结果将有xx¯=0

缩放为

xi=xi(ixi2).

结果将有xixi2=1

标准化是居中然后缩放。结果将有xx¯=0ixi2=1

您绝对正确,对于 PCA 来说,具有差异很大的单个变量可能会出现问题,特别是如果这种差异是由于不同的单位或不同的物理尺寸造成的。因此,除非变量都具有可比性(相同的物理量,相同的单位),否则建议对相关矩阵而不是协方差矩阵执行 PCA。看这里:

对相关矩阵进行 PCA 相当于在分析之前对所有变量进行标准化(然后对协方差矩阵进行 PCA)。标准化是指对每个变量进行中心化,然后除以其标准差,使它们都成为单位方差。这可以看作是一种方便的“单位变更”,使所有单位都具有可比性。

人们可能会问,有时是否有更好的“标准化”变量的方法;例如,可以选择除以一些稳健的方差估计,而不是除以原始方差。这是在以下线程中提出的,请参阅随后的讨论(即使那里没有给出明确的答案):

最后,您担心通过标准偏差(或类似的东西)进行归一化不是旋转不变的。嗯,是的,它不是。但是,正如@whuber 在上面的评论中所说,没有旋转不变的方法:改变单个变量的单位不是旋转不变的操作这里没有什么可担心的。

应用 PCA 之前的一种常见技术是从样本中减去平均值。如果您不这样做,则第一个特征向量将是均值。我不确定你是否做过,但让我谈谈。如果我们用 MATLAB 代码说话:这是

clear, clf
clc
%% Let us draw a line
scale = 1;
x = scale .* (1:0.25:5);
y = 1/2*x + 1;

%% and add some noise
y = y + rand(size(y));

%% plot and see
subplot(1,2,1), plot(x, y, '*k')
axis equal

%% Put the data in columns and see what SVD gives
A = [x;y];
[U, S, V] = svd(A);

hold on
plot([mean(x)-U(1,1)*S(1,1) mean(x)+U(1,1)*S(1,1)], ...
     [mean(y)-U(2,1)*S(1,1) mean(y)+U(2,1)*S(1,1)], ...
     ':k');
plot([mean(x)-U(1,2)*S(2,2) mean(x)+U(1,2)*S(2,2)], ...
     [mean(y)-U(2,2)*S(2,2) mean(y)+U(2,2)*S(2,2)], ...
     '-.k');
title('The left singular vectors found directly')

%% Now, subtract the mean and see its effect
A(1,:) = A(1,:) - mean(A(1,:));
A(2,:) = A(2,:) - mean(A(2,:));

[U, S, V] = svd(A);

subplot(1,2,2)
plot(x, y, '*k')
axis equal
hold on
plot([mean(x)-U(1,1)*S(1,1) mean(x)+U(1,1)*S(1,1)], ...
     [mean(y)-U(2,1)*S(1,1) mean(y)+U(2,1)*S(1,1)], ...
     ':k');
plot([mean(x)-U(1,2)*S(2,2) mean(x)+U(1,2)*S(2,2)], ...
     [mean(y)-U(2,2)*S(2,2) mean(y)+U(2,2)*S(2,2)], ...
     '-.k');
title('The left singular vectors found after subtracting mean')

从图中可以看出,如果你想更好地分析(协)方差,我认为你应该从数据中减去平均值。那么这些值将不在 10-100 和 0.1-1 之间,但它们的平均值都将为零。方差将作为特征值(或奇异值的平方)找到。当我们减去平均值的情况与不减去平均值的情况一样,找到的特征向量不受维度尺度的影响。例如,我已经测试并观察了以下内容,告诉您减去平均值可能对您的情况很重要。所以问题可能不是由方差引起的,而是由翻译差异引起的。

% scale = 0.5, without subtracting mean
U =

-0.5504   -0.8349
-0.8349    0.5504


% scale = 0.5, with subtracting mean
U =

-0.8311   -0.5561
-0.5561    0.8311


% scale = 1, without subtracting mean
U =

-0.7327   -0.6806
-0.6806    0.7327

% scale = 1, with subtracting mean
U =

-0.8464   -0.5325
-0.5325    0.8464


% scale = 100, without subtracting mean
U =

-0.8930   -0.4501
-0.4501    0.8930


% scale = 100, with subtracting mean
U =

-0.8943   -0.4474
-0.4474    0.8943

在此处输入图像描述

为了标准化 PCA 的数据,还使用了以下公式

SC=100Xmin(X)max(X)min(X)

其中是国家年的该指标的原始值, 描述了所有国家在所有年份中该指标的所有原始值。XctX