2015-02-08 53 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