【问题标题】:R - Get a matrix with the reduced number of features with SVDR - 使用 SVD 获得特征数量减少的矩阵
【发布时间】:2014-07-12 05:52:27
【问题描述】:

我正在使用带有 R 的 SVD 包,我可以通过将最低奇异值替换为 0 来降低矩阵的维数。但是当我重构矩阵时,我仍然具有相同数量的特征,我可以找不到如何有效地删除源矩阵中最无用的特征以减少其列数。

例如我目前正在做的事情:

这是我的源矩阵 A:

  A B C D
1 7 6 1 6
2 4 8 2 4
3 2 3 2 3
4 2 3 1 3

如果我这样做:

s = svd(A)
s$d[3:4] = 0  # Replacement of the 2 smallest singular values by 0
A' = s$u %*% diag(s$d)  %*% t(s$v)

我得到的 A' 具有相同的尺寸 (4x4),仅使用 2 个“组件”进行重构,并且是 A 的近似值(包含的信息少一点,可能噪声少等):

      [,1]     [,2]      [,3]     [,4]
1 6.871009 5.887558 1.1791440 6.215131
2 3.799792 7.779251 2.3862880 4.357163
3 2.289294 3.512959 0.9876354 2.386322
4 2.408818 3.181448 0.8417837 2.406172

我想要的是一个列数较少但再现不同行之间距离的子矩阵,如下所示(使用 PCA 获得,我们称之为 A''):

        PC1        PC2
1 -3.588727  1.7125360
2 -2.065012 -2.2465708
3  2.838545  0.1377343   # The similarity between rows 3 
4  2.815194  0.3963005   # and 4 in A is conserved in A''

这是使用 PCA 获取 A'' 的代码:

p = prcomp(A)
A'' = p$x[,1:2]

最终目标是减少列数,以加快大型数据集上的聚类算法。

如果有人可以指导我,请提前感谢您:)

【问题讨论】:

  • 您应该构造一个示例矩阵,其中一些小特征值设置为 0,以帮助显示您想要完成的工作以及使用 svd 方法得到的结果。否则,你会强迫每个试图回答问题的人这样做。
  • 你好马修,我编辑了我的问题,现在有一个具体的例子。

标签: r feature-extraction svd dimensionality-reduction matrix-factorization


【解决方案1】:

我会查看this chapter on dimensionality reductionthis cross-validated question。这个想法是可以使用更少的信息重建整个数据集。从某种意义上说,它不像 PCA,您可能只选择保留 10 个主成分中的 2 个。

当您进行上述修剪时,您实际上只是去除了数据中的一些“噪音”。数据还是一样的维度。

【讨论】:

  • 您好 MrFlick,谢谢您的回复,事实上,在我所做的和您提到的页面中,我们正在使用相同大小但信息较少的矩阵进行重建。但我想知道的是,是否有办法从源矩阵创建一个列更少的子矩阵,使用 SVD 再现原始矩阵中的行之间的距离?
  • @ClydeX 我找不到任何例子。你有理由相信它应该这样工作吗?
  • 唯一的原因是 PCA 使用 SVD,因此应该可以手动根据 SVD 输出进行因子分析。这个想法是为了更好地理解 SVD 和 PCA 之间的联系。
  • 如果这个想法是为了更好地理解一种统计方法,那么这并不是一个真正的具体编程问题。在stats.stackexchange.com 提问可能会更好
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-29
  • 2018-08-06
  • 1970-01-01
  • 2018-02-02
相关资源
最近更新 更多