我正在使用R中的SVD软件包,通过将最低奇异值替换为0,我能够降低矩阵的维度。但是,当我重新组合矩阵时,仍然有相同数量的特征。我找不到一种有效的方法来删除源矩阵中最无用的特征,以减少其列数。
如果我执行以下操作:
我得到了A',它具有相同的尺寸(4x4),仅使用2个“组件”进行重构,并且是A的近似(包含较少的信息,可能有更少的噪音等):
我需要的是一个子矩阵,它的列较少,但可以重现不同行之间的距离,类似于这样(使用PCA得到,我们称之为A''):
这里是使用PCA获取A''指标的代码:
最终目标是减少列的数量,以加快对大型数据集进行聚类算法的处理速度。
如果有人能指导我,提前感谢您 :)
例如,目前我正在执行以下操作:
这是我的源矩阵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]
最终目标是减少列的数量,以加快对大型数据集进行聚类算法的处理速度。
如果有人能指导我,提前感谢您 :)