2012-09-11 7 views
3

Thomas Hoffman (1999)에 의해 제안 된 pLSA 알고리즘을 구현하려고합니다. 그러나, 내가 발견 한 모든 구현은 입력 용어 - 문서 행렬을 희소 대신에 완전하다고 간주합니다. 필자의 입력 행렬은 매우 크고 희소하기 때문에 희소성을 지원하는 알고리즘을 찾고 싶습니다. 내가 찾도록 도와 줄 수 있니? Matlab 또는 Java가 선호됩니다. 나는 사실에서 PennAspect http://www.cis.upenn.edu/~ungar/Datamining/software_dist/PennAspect/index.html 가 희소 행렬 입력과 필리핀 선박 회사 연합 (PLSA)를 구현하는 것이스파 스 매트릭스에 대한 pLSA 구현

UPDATE 발견했다.

해결책은 간단합니다. 2 차원 배열 (각 행에 대해 동일한 길이를 갖지 않는 배열)을 사용하여 스파 스 매트릭스를 나타낼 수 있습니다.

답변

0

나는 너무 늦었다. 그러나 나는 또한 대답을 찾고 있었고 마침내 혼자서 구현했습니다. 나는 R 새로운 오전하지만이 알고리즘을 사랑하고 그것은 10 반복 내 대형 스파 스 DTM 즉 문서의 용어 매트릭스와 완벽하게 작동한다 R.에서이를 구현하도록 조언했다 :

##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 
} 

는 사람이 여전히이 찾고 도움이되기를 바랍니다 .