我正在尝试实施Thomas Hoffman(1999)提出的pLSA算法。但是,我发现的所有实现都认为输入term-doc矩阵是完整的而不是稀疏的。由于我的输入矩阵非常大且稀疏,我想找出一个支持稀疏性的算法。你能帮我找一个吗? Matlab或Java是首选。
UPDATE 我发现PennAspect http://www.cis.upenn.edu/~ungar/Datamining/software_dist/PennAspect/index.html 事实上,用稀疏矩阵输入实现PLSA。
解决方案很简单。 2D不规则数组(每行不具有相同长度的数组)可用于表示稀疏矩阵。
答案 0 :(得分: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
}
希望它能帮助任何人继续寻找这个。