fozziethebeat/S-Space — Issue #8: SVDLIBC and SVDLIBJ are broken in different ways
Author: fozziethebeat
Created: 2011-12-17 01:19:13+00:00
State: open

I computed a log-entropy term-document matrix over 92,000 documents from New York Times year 2003. When reducing it via SVD, the three different implementations give wildly and significantly different results:

Octave/Matlab: I consider this to be the most correct. When using the redused U and V matrices in word similarity evaluations and document classification, results were high.
SVDLIBC: Broken when saving to dense binary formates (seems to work fine for dense text). For the most part, the U and V matrices matched those from Octave except that LIBC addeds a new first row to U and V that do not match any of the matrices from Octave/Matlab.
SVDLIBJ: Sometimes this matches Octave/Matlab perfectly. Othertimes it generates mystery magic. This should no longer be used.

Based on these results, and the fact that I didn't find out that dense text formats with LIBC worked correctly until recently, I did a search for java based SVD implementations. Beyond the ones we've already considered, there's Apache's Common Math library and Mahout's SVD implementation. But both are unsatisfactory. Apache Math computes the full svd and does not utilize sparse matrices. Mahout only seems to return the U matrix, as best I can tell.

This probably won't see a solution for a while, but this is just to track any progress we do make.