2012-09-11 63 views
3

我试图实现由Thomas Hoffman(1999)提出的pLSA算法。然而,我发现的所有实现都认为输入term-doc矩阵是完整的而不是稀疏矩阵。由于我的输入矩阵非常大且稀疏,我想找出一个支持稀疏性的算法。你能帮我找到一个吗? Matlab或Java是首选。稀疏矩阵的pLSA实现

UPDATE 我发现,事实上,PennAspect http://www.cis.upenn.edu/~ungar/Datamining/software_dist/PennAspect/index.html 稀疏矩阵输入实现PLSA。

解决方案很简单。可以使用2D差异化阵列(数组,其对于每行不具有相同的长度)可以用来表示稀疏矩阵。

回答

0

我知道它太晚了。但我也在寻找答案,并最终自行实施。我是新于R,但爱这个算法,并建议实施这R.它与我的大稀疏DTM即文档词矩阵,10次迭代工作完美:

##PLSA algo 
k <- 100; 
P1<-t(apply(matrix(sample.int(46, k*dim(mat)[2], TRUE), k, dim(mat[2]),1,funnorm <- function(matrow){ 
matcol <- matrow/sum(matrow) 
return(matcol) 
})) 

P2<-t(apply(matrix(sample.int(46, dim(mat)[1]*k, TRUE), dim(mat)[1], k),1,funnorm <- function(matrow){ 
matcol <- matrow/sum(matrow) 
return(matcol) 
})) 

for(n in 1:10){ 

P3<-P2 %*% P1 
P4 <- mat/P3 

P5 <- P4 %*% t(P1) 
P6 <- P2 * P5 
P2new <- P6/(rowSums(P6)) 

P5 <- t(P2) %*% P4 
P6 <- P1 * P5 
P1new <- P6/(rowSums(P6)) 

P1 <- P1new 
P2 <- P2new 
} 

希望它可以帮助别人还在找这个。