2015-02-08 129 views
0

我试图在R中使用SVD进行矩阵的降维。我能找到“MovMat”矩阵的D,U,V矩阵。我想减少它们在D矩阵中的值小于“阈值”的一些维度。 我写下面的代码。但我不知道如何在“MovMat”矩阵中找到低于阈值的值。RVD中的SVD降维

library(cluster) 
library(fpc) 

# "MovMat" is a users-movies Matrix. 
# It is contain the rating score which each user gives for each movie. 
svdAllDimensions = svd(MovMat) 
d=diag(svd$d) # Finding D, U, V 
u=svd$u 
v=svd$v 
+0

一个可重复的例子可能有助于您获得答案的机会。现在,它听起来像你只是问如何测试'D <阈值',但我猜(?)你知道该怎么做... – 2015-02-08 20:30:51

+0

我的问题是在R编程语言。我知道如何在理论上做到这一点。例如,我不知道如何删除所有值为零的列。 – Rojin 2015-02-08 21:07:48

+0

下面是你如何在R中做到这一点。首先,创建一个示例矩阵和阈值,做这个'set.seed(1); m(diag(5)); thresh < - 0.5'。然后看看你的矩阵,它的对角线等等。 DIAG(米); diag(m) 2015-02-08 21:28:56

回答

1

我分配d小于阈值和再乘以d,V,U彼此并寻找新的矩阵具有较少维的值。

for(i in rowOfD){ 
    for(j in columnOfD){ 
    if (i==j){ 
     if(d[i,j]<Threshold){ 
     d[i,j] = 0 
     } 
    } 
    } 
} 
+2

极其低效的R代码。为什么不只是:'d [d 2015-02-08 21:10:43