3

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

更新我发现 PennAspect http://www.cis.upenn.edu/~ungar/Datamining/software_dist/PennAspect/index.html 实际上用稀疏矩阵输入实现了 PLSA。

解决方案很简单。二维参差不齐的数组(每行长度不同的数组)可用于表示稀疏矩阵。

4

1 回答 1

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
}

希望它可以帮助任何仍在寻找这个的人。

于 2017-09-23T07:33:35.070 回答