-
Notifications
You must be signed in to change notification settings - Fork 206
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Why do I get better results with libfm? #28
Comments
I'm seeing some discrepancies between libfm and fastfm with movielens. Before diving into my observations can you confirm the following are equivalent:
|
I don't see a difference, but please check that the |
Hi, Immanuel! Unfortunately, the results of fastFM are not super optimistic Then I found this topic, so honestly I wasn't thinking about clipping values. Maybe you know a reason? FastFM uses different priors or something else? |
@arogozhnikov BTW, you need standardization especially for pyFM coreylynch/pyFM#3 (comment) |
@chezou all the features are dummy (0-1) and table should be sparse. No, for the tests I am running this step neither needed nor possible. |
@arogozhnikov
As is, I'm not convinced that libFM is faster and performs better then fastFM for MCMC regression. I have done less comprehensive comparisons for MCMC classification but the algorithm / prior should be the same in both libraries. I would be interested to look into it if you can clearly show that libFM dominates fastFM systematically for MCMC classification. |
@ibayer
|
@arogozhnikov It's possible to use a random seed with libFM. |
Why do I get better results with libfm?
Be careful if you use a regression model with a categorical target, such as the 1-5 star rating of the movielens dataset.
libfm automatically clips the prediction values to the higest / lowest value in the training data.
This make sense if you predict ratings with a regression model and evaluate with RMSE.
For example, it's certainly better to predict a 5 star rating if the regression score is > 5 then the regression value.
With fastFM you have to do the clipping yourself, because clipping is not always a good idea.
But it's easy to do if you need it.
Why do I not get exactly the same results with fastFM as with libFM?
FMs are non-linear models that use random initialization. This means that the solver might end up in a different local optima if the initialization changes. We can use a random seed in fastFM to make individual runs comparable, but that doesn't help if you compare results between different implementations. You should therefore always expect small differences between fastFM and libFM predictions.
The text was updated successfully, but these errors were encountered: