【问题标题】:Should I perform data centering before apply SVD?我应该在应用 SVD 之前执行数据中心化吗?
【发布时间】:2017-06-20 20:26:43
【问题描述】:

我必须在 Matlab 中使用 SVD 来获得我的数据的简化版本。 我读过函数svds(X,k) 执行SVD 并返回前k 个特征值和特征向量。如果必须对数据进行标准化,文档中没有提及。 归一化是指减去平均值和除以标准差。

当我实现 PCA 时,我曾经以这种方式进行标准化。但我知道使用 matlab 函数 pca() 时不需要它,因为它使用隐式执行归一化的 cov() 计算协方差矩阵。

所以,问题是。我需要投影矩阵来通过 SVD 将我的 n-dim 数据减少到 k-dim 数据。我是否应该对训练数据进行数据规范化(因此,对进一步预测的新数据进行相同的规范化)? 谢谢

【问题讨论】:

    标签: matlab normalization pca svd


    【解决方案1】:

    基本上,答案是肯定的,您通常应该执行标准化。原因是特征可以有非常不同的缩放比例,在考虑特征的唯一性时我们通常不想考虑缩放比例。

    假设我们有两个特征 x 和 y,均方差为 1,但其中 x 的平均值为 1,y 的平均值为 1000。那么样本矩阵将如下所示

    n = 500; % samples
    x =   1  + randn(n,1);
    y = 1000 + randn(n,1);
    svd([x,y])
    

    但是这样做的问题是 y 的尺度(没有归一化)基本上会冲掉 x 的微小变化。具体来说,如果我们只检查 [x,y] 的奇异值,我们可能倾向于说 x 是 y 的线性因子(因为其中一个奇异值比另一个小得多)。但实际上,我们知道情况并非如此,因为 x 是独立生成的。

    事实上,您经常会发现,在我们去除均值后,您只能看到信号中的“真实”数据。最后,您可以想象我们有一些功能

    z = 1e6 + sin(t)
    

    如果有人刚刚给了你这些数字,你可以看看序列

    z = 1000001.54, 1000001.2, 1000001.4,...
    

    然后想,“那个信号很无聊,它基本上只是 1e6 加上一些四舍五入的术语......”。但是,一旦我们消除了平均值,我们就会看到它实际上是什么的信号……确实是一个非常有趣和具体的信号。长话短说,您应该始终删除手段和规模。

    【讨论】:

      【解决方案2】:

      这真的取决于你想对你的数据做什么。居中和缩放有助于获得代表数据变化形状的主成分,而与缩放无关。如果您想进一步使用主要组件本身,特别是如果您想可视化它们,我会说它是最需要的。它也可以在分类过程中提供帮助,因为您的分数将被标准化,这可能有助于您的分类器。但是,这取决于应用程序,因为在某些应用程序中,能量还携带着不应丢弃的有用信息 - 没有通用答案!

      现在您写道,您所需要的只是“通过 SVD 将我的 n-dim 数据减少为 k-dim 的投影矩阵”。在这种情况下,无需居中或缩放任何东西:

      [U,~] = svd(TrainingData);
      RecudedData = U(:,k)'*TestData;
      

      将完成这项工作。 svds 可能值得考虑当您的 TrainingData 很大(在两个维度上)以致于 svd 太慢(如果它在一维上很大,只需将 svd 应用于 gram 矩阵)。

      【讨论】:

      • 基本上我有稀疏向量。我想从训练集中“学习”一些投影矩阵,用于缩小训练和测试数据的规模。这些投影向量必须馈送到 SVM 分类器(当然用于训练和测试)。所以根据你说的,我不需要从火车和测试集中减去火车向量的平均值。我呢?
      • 好吧,如果您将它们输入分类器,那么我通常会建议居中并缩放(除非缩放本身是一个相关功能,但这取决于您的数据,我们对此一无所知)。这从有助于稳定 SVM 的功能中消除了缩放的影响。请参阅 bremen_matt 的回复,他很好地解释了这方面。
      • 通过使用 svds(),U 的维度结果 me 为训练数据的数量 k!有问题,因为它不会将测试数据从 1×n 向量转换为 1×k 向量
      • 那么,您缺少转置。我写它的方式,我期望训练数据是列。如果是行,则需要转置。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-14
      • 2012-01-08
      • 1970-01-01
      • 2015-07-12
      • 1970-01-01
      • 1970-01-01
      • 2013-09-03
      相关资源
      最近更新 更多