[SPARK-7008] An implement of Factorization Machines based on Scala and Spark MLlib. #5591
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
An implementation of Factorization Machines based on Scala and Spark MLlib.
Factorization Machine is a kind of state-of-the-art machine learning algorithm for multi-linear regression, and is widely used in recommendation systems.
Factorization Machines algorithm and its C++ implement LibFM works well in recent years' recommendation competitions.
A FMModel consist of three parts:
an Intercept (optional),
an one-way interactions weights like other linear models (optional),
a numFactors * numFeatures matrix representing the factors of each feature (mandatory).
I implement the training algorithm with SGD provided by MLlib's GradientDescent (to use MLlib's SGD, the model is encoded to a dense vector during training).
Ref:
http://libfm.org/
http://doi.acm.org/10.1145/2168752.2168771
http://www.inf.uni-konstanz.de/~rendle/pdf/Rendle2010FM.pdf