mahout-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Sebastian Schelter (JIRA)" <>
Subject [jira] Commented: (MAHOUT-542) MapReduce implementation of ALS-WR
Date Fri, 31 Dec 2010 11:49:51 GMT


Sebastian Schelter commented on MAHOUT-542:

Can you compute factorizations for multiple values of lambda in one go and then evaluate all
of them in one pass?

This would require that parallelALS accept a list of lambdas and produce multiple outputs
It would also require that evaluateALS accept multiple models as well.

I don't think this could work with the distributed implementation as each iteration needs
to see the feature vectors that have been computed in previous iteration with the same lambda
value, so I don't see how to concurrently compute the values for several lambdas. My evaluation
code currently depends on the feature matrices fitting into memory which might not always
be the case, which could be another bottleneck. 

However in a non-distributed implementation this approach could work, would it help to pick
a sample from the input data, try to find a near-optimal lambda on that in a non-distributed
way and use that for the distributed computation too? Not sure on this.

Another issue I'm currently stuck on is how to compute the recommendations after the factorization.
The rating matrix is factorized in the feature matrices U and M for users and items and a
single rating can easily predicted by multiplying the feature vectors of the user and the
item. If we wanna compute batch recommendations for all users we need to find an intelligent
way to select "candidate items" to recommend for each users as we can't simply compute t(U)
* M because those are dense matrices.

Our non-distributed SVDRecommender uses simple cooccurrence to identify those candidate items,
so one way I could think of would be to use RowSimilarityJob to find cooccurring items and
foreach user to only compute his ratings for items that cooccur with preferred ones. Not sure
either if this is the best way to do this.

> MapReduce implementation of ALS-WR
> ----------------------------------
>                 Key: MAHOUT-542
>                 URL:
>             Project: Mahout
>          Issue Type: New Feature
>          Components: Collaborative Filtering
>    Affects Versions: 0.5
>            Reporter: Sebastian Schelter
>         Attachments: MAHOUT-452.patch, MAHOUT-542-2.patch, MAHOUT-542-3.patch
> As Mahout is currently lacking a distributed collaborative filtering algorithm that uses
matrix factorization, I spent some time reading through a couple of the Netflix papers and
stumbled upon the "Large-scale Parallel Collaborative Filtering for the Netflix Prize" available
> It describes a parallel algorithm that uses "Alternating-Least-Squares with Weighted-λ-Regularization"
to factorize the preference-matrix and gives some insights on how the authors distributed
the computation using Matlab.
> It seemed to me that this approach could also easily be parallelized using Map/Reduce,
so I sat down and created a prototype version. I'm not really sure I got the mathematical
details correct (they need some optimization anyway), but I wanna put up my prototype implementation
here per Yonik's law of patches.
> Maybe someone has the time and motivation to work a little on this with me. It would
be great if someone could validate the approach taken (I'm willing to help as the code might
not be intuitive to read) and could try to factorize some test data and give feedback then.

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

View raw message