2
$\begingroup$

I want to get the first few eigenvectors of real symmetric matrices with missing values. Since it has missing values, I won't be able to use the common linear programming techniques, but stochastic gradient will work. Funk's SVD used in recommendation engines solves a more general problem of low-rank SVD approximation using gradient descent. So some flavor of Funk's SVD should be able to solve this. I will be using this in R so any R or C++ library that plays well with Rcpp will do. Are there any standard implementations or libraries that I can use? It doesn't make sense to roll my own for such a standard algorithm.

$\endgroup$
  • 2
    $\begingroup$ Please check the following two threads: here and here not much has changed since. As I word of caution see this thread too. $\endgroup$ – usεr11852 Nov 25 '15 at 5:34
  • $\begingroup$ @usεr11852, thank you. However, I am more interested in finding a good implementation for the Funk SVD or other factorization with missing values algorithm. The threads discuss the idea rather than existing libraries, $\endgroup$ – highBandWidth Nov 25 '15 at 5:39
  • 1
    $\begingroup$ Yep, I realised that that's why I added the word of caution. Usually people either impute or exclude NaN as they do not make much sense statistically. If your matrix ain't huge they're some implementation of probabilistic PCA that you could use; most of them use some ALS/E-M algorithm variant to perform the eigen-decomposition in question. Not exactly what you want but hey: "Far better an approximate answer to the right question..." :D. $\endgroup$ – usεr11852 Nov 25 '15 at 5:57
  • $\begingroup$ May be use Probabilistic Matrix Factorization as it can handle missing values naturally. In bonus, you get probabilistic estimates (posterior distributions) of your parameters. $\endgroup$ – Vladislavs Dovgalecs Apr 20 '16 at 23:04
1
+50
$\begingroup$

In my comments I already mentioned two threads (here and here) in SE that presented some interesting discussion points regarding FunkSVD. The only place I have found a decent FunkSVD implementation that could potentially work with R is LensKit's, Matrix Factorization CF module. Let me point out that this will not be straightforward as you will need to use a JAVA API to connect from R to Lenskit.

Given you problem maybe checking the R package recommenderlab might also be beneficial. Let me note that in many cases recommender systems essentially give out an informed nearest-neighbour suggestion so for your particular problem you might be able to re-express it as clustering/classification task rather than a manifold-learning one.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.