Fork me on GitHub

MyMediaLite: Documentation


MyMediaLite 3.11 has been released.


API Documentation

File Formats

Descriptions of several file formats supported by the MyMediaLite library and its command line tools:

Note that you are not bound to using text-based files, you may also load your data from a database, or implement your own I/O routines.

Frequently Asked Questions (FAQ)

What are the differences between MyMediaLite and the MyMedia Framework?

  1. MyMediaLite is free and open source software, published under the terms of GPLv3, whereas the MyMedia Framework is only available for non-commercial uses.
  2. MyMediaLite is, as the name says, leaner and simpler and carries less overhead, in particular:
    • it does not require a database
    • it contains a different set of recommender algorithms (even though there is some overlap)
    • it does not contain advanced features such as complex recommenders, recommender flows, OpenID integration, etc.

I found a bug. Where can I report it?

We have an issue tracker on GitHub.

Please tell us which version of MyMediaLite you use, and describe in detail how to reproduce the bug, and include your data with the report (if possible).

It is very nice you implemented method X from paper Y. Can I use it for my next paper?

Yes, sure you can. However ...

Disclaimer: While we did our best when implementing the recommenders, we cannot guarantee that they are bug-free, nor can we guarantee that they have exactly the same behavior is the methods described in the papers we mention. It is your duty to perform calibration experiments, that is you try to replicate the evaluation results reported by the authors, before using an implementation of their method.

If you use MyMediaLite for your experiments, please cite us. See next question.

How can I cite MyMediaLite in my paper?

If you use MyMediaLite for your research, we would be happy if you cited our paper:

    author    = { Zeno Gantner and Steffen Rendle and Christoph Freudenthaler and Lars Schmidt-Thieme },
    title     = { {MyMediaLite}: A Free Recommender System Library },
    booktitle = { Proceedings of the 5th ACM Conference
                  on Recommender Systems (RecSys 2011) },
    year      = 2011

Do not forget to mention which version of MyMediaLite you used, to make it easier for your readers to reproduce your results.

If you think your developed software may be useful for others, please consider contributing it to the MyMediaLite project.

Can I make predictions without performing an evaluation?


To do rating prediction without evaluation, just provide --test-file and --prediction-file as command-line arguments.

To do item recommendation without evaluation, just provide --prediction-file as command-line arguments. For item recommendation, you can fine-tune what you want to predict with --predict-items-number=N, --repeated-items, --candidate-items. etc.

Item recommender evaluation is quite slow. What can I do to speed it up?

Evaluation using measures like AUC or precision requires, at least for many recommenders, computing the scores for all user-item combination. This means evaluation can take some time, even if you have a fast recommender. If evaluation takes too much time, you can consider reducing the number of candidate items, or the number of users.

The item prediction command line tool offers the options --num-test-users=N, --candidate-items=FILE and --test-users=FILE for this purpose.

Is MyMediaLite thread-safe?

No, the MyMediaLite core library is generally not thread-safe. If you use MyMediaLite in a multi-threading scenario, you need to make sure that write access to data structures and recommender models (e.g. training) is properly synchronized.

The Predict() method is thread-safe because it does not write any data.

What can I do to make MyMediaLite consume less memory?

Depending on your application, you can use datatypes that use less memory, e.g. StaticByteRatings, StaticFloatRatings for rating prediction, or PosOnlyFeedback<SparseBooleanMatrixBinarySearch>.

If you use the rating prediction command-line tool, you may use the --rating-type=byte|float argument.

If your user and item IDs start at 0 and do not have gaps, you can use the --no-id-mapping option with both command-line tools. This disables the mapping of the user and item IDs to internal IDs without gaps.

When working with large datasets, Mono complains that there is not enough heap space. What can I do about this?

Compile Mono with the configure option --with-large-heap=yes.

What to do with AttributeErrors in IronPython?

AttributeError: static property 'Ratings' of 'RatingPredictor' can only be assigned to through a type, not an instance

You get this error for example when you try to create a recommender like this:

     recommender = RatingPrediction.MatrixFactorization
You can fix this by adding () after the type name:
     recommender = RatingPrediction.MatrixFactorization()

ContactFollow us on Twitter