Giter Club home page Giter Club logo

mymedialite's Introduction

MyMediaLite - a free recommender system algorithm library

Build Status

Features

  • Dozens of different recommendation methods,
    • methods can use collaborative, attribute/content, and relational data,
  • support for incremental training for most models.
  • Ready to use:
    • Includes evaluation routines for rating and item prediction; quality measures MAE, NAME, RMSE, CBD, AUC, MAP, precision@N, recall@N, NDCG, MRR; and
    • command line tools that read a simple text-based input format.
  • Compact: Core library is about 275 KB "big".
  • Portable: Written in C#, for the .NET platform; runs on every architecture where Mono works: Linux, Windows, Mac OS X.

Feedback and Contributions

We are always happy about feedback, and encourage MyMediaLite's users to contribute code to the project.

Just fork it on GitHub and send pull requests!

Bugs and feature requests can be reported on our mailing list or in our issue tracker.

Installation

See doc/Installation for installation instructions.

Documentation

See doc/ and the website for more documentation.

Citing MyMediaLite

If you use MyMediaLite for your research, it would be nice to acknowledge it in your papers by citing the following paper:

Zeno Gantner, Steffen Rendle, Christoph Freudenthaler, Lars Schmidt-Thieme: MyMediaLite: A Free Recommender System Library. RecSys 2011

@inproceedings{Gantner2011MyMediaLite,
  author    = {Zeno Gantner and Steffen Rendle and Christoph Freudenthaler and Lars Schmidt-Thieme},
  title     = {{MyMediaLite}: A Free Recommender System Library},
  booktitle = {5th ACM International Conference on Recommender Systems (RecSys 2011)},
  year      = 2011,
  location  = {Chicago, USA}
}

Academic publications that use or reference MyMediaLite

Contributors

Thanks to the following people, who provided valuable feedback, code, or other kinds of assistance: Roberto Abalde, Nicholas Ampazis, Thorsten Angermann, Suhrid Balakrishnan, Alejandro Bellogín, Christian Brauch, Fu Changhong, Subramanyeshwar Cherukuri, Simon Dooms, Lucas Drumond, Michael Ekstrand, Christoph Freudenthaler, Zeno Gantner, Jagadeesh Gorla, Josif Grabocka, Mark Graus, Guibing Guo, Andreas Hoffmann, Tomas Horvath, Kenneth Hoste, Frantisek Hrdina, Jia Huang, Nicolas Hug, Dominik Imrich, Dietmar Jannach, Peng Jiang, KwangSeob Kim, Artus Krohn-Grimberghe, Tobias Lang, Christina Lichtenthäler, Damir Logar, Marcelo Manzato, Brian McFee, Greg Najda, Chris Newell, Thai-Nghe Nguyen, Dimitris Paraschakis, Simon Renaud, Steffen Rendle, Marco Ribeiro, Roland Richter, Saurabh S., Sebastian Schelter, Lars Schmidt-Thieme, Yue Shi, Jordan Silva, Piotr Sobotka, Jessica Tölke, Tom Tung, Pieter-Jan Verbruggen, Julien Verplanken, Elvio Vicosa, João Vinagre, Oleksandr Vitvitskyi, Yongfeng Wang, Lina Weichbrodt, Cees Wesseling, Yong Zheng, GitHub users jkleint and NEBabylon.

This work was funded by the European Commission FP7 project MyMedia (Dynamic Personalization of Multimedia) under the grant agreement no. 215006.

Copyright & Licensing

Copyright (C) 2010, 2011, 2012, 2013, 2015, 2016, 2019 The MyMediaLite contributors

MyMediaLite is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

MyMediaLite is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with MyMediaLite. If not, see http://www.gnu.org/licenses/.


This package contains Mono.Options, C5, Math.NET Numerics, and NUnit.

See doc/ComponentLicenses for more information about their licensing terms.

mymedialite's People

Contributors

astrodi avatar joaoms avatar joesgab avatar jordansilva avatar jtoelke avatar lhcgreg avatar mmanzato avatar nicolashug avatar paraschakis avatar petrsobotka avatar rric avatar ummae avatar zenogantner avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mymedialite's Issues

load recommender from model file w/o specifying the type

Currently, we instantiate a recommender and then load a model via its LoadModel() method.

It would be nice to have a tiny helper tool that looks into the model file, instantiates the recommender by itself, and then does the above.

make bold-driver heuristics configurable

Currently, the bold-driver learning rate adaptation schemes (for BiasedMatrixFactorization and BPRMF) use fixed values to increment/decrement the step size. This should be configurable (and set to sensible defaults)

get MinRating and MaxRating from data

Currently, the user (of the command-line tool or the library) has to set the minimum and maximum ratings manually (if they are not the default 1 and 5). It would be more convenient to get them from the data and allowing to set them manually if necessary.

save user/item ID mappings together with recommender models

Chris wrote:

I've done some work with Mahout, and one feature I appreciate is that it stores the user and item mappings with the model data when you save it.
It makes it easier to resurrect a recommender and reduces the likelihood I'll get all the IDs mixed up!

automatic determination of a suitable learn rate

For recommenders that are trained with gradient-based algorithms we need suitable learn rates. These usually differ from data set to data set. MyMediaLite should contain a routine that automatically finds a suitable learn rate for a given data set.

use uint instead of int to refer to entities and list entries

user and item IDs could be uints (it is assumed anyway that they are >= 0)

Same for index data types in many places in the library.

It would make it harder to port MyMediaLite to Java after those changes, so we better be careful.

Not high priority.

hyperparameter search for all recommenders

Hyperparameter search by line/grid search and Nelder-Mead should be supported for all recommenders;
For recommenders that use a learn rate (=step size), there should also be routines for learning good step sizes.

This will push MyMediaLite more towards being usable as a black-box tool.

filters for item prediction

add pre- and post-filter APIs to MyMediaLite

pre-filters generate candidate lists

  • categories
  • already seen
  • ...

post-filter

  • diversification
  • thresholds

implement user fold-in

Chris suggested this for item prediction.

An interface for this could be:

IList<WeightedItems> Predict(IList<int> watched_items, IList<int> candidate_items)
IList<int> Predict(IList<int> watched_items, IList<int> candidate_items, int n)

This would train features for a user specified by the list watched_items, and then predict scores for the list candidate_items.

One additional thing to consider for the interface would be to extend the interface to allow user attributes (not supported by BPR-MF, but possibly by other recommenders):

IList<double> Predict(IList<int> watched_items, var user_features , IList<int> candidate_items)

Also implement a similar thing for rating prediction, like

 IList<WeightedItem> PredictItems(IList<WeightedItem> rated_items);
 IList<int> PredictItems(IList<WeightedItem> rated_items, int n);

stand-alone rating prediction exectuable

A rating prediction program that does not need training data, but just relies on the model file to make predictions.

Will not work for memory-based recommenders; we will also take care to change the model file format to incorporate user ID and item ID mappings.

stand-alone evaluation exectuables

for rating prediction and item prediction

The idea is that users of other software packages can use those to create the predictions, and then evaluate the predictions using MyMediaLite's evaluation routines.

Suggested by Lucas Drumond.

integrate GraphLab

GraphLab has a nice library of rating prediction algorithms based on matrix/tensor factorization:
http://graphlab.org/pmf.html

It would be nice to have an interface to GraphLab to be able to use this library and to use other recommenders written "in" GraphLab that make use of its particular features wrt. parallelization.

Context-aware recommendation

add namespace ContextAwareRecommendation with the interfaces IContextAwareItemRecommender (also covers tag recommendation, time-aware recommendations, and search queries) and IContextAwareRatingRecommender

suppress i18n for command line parameters

Currently, parsing floats/doubles in the Mono.Option command line parameters follows the current locale.
This is not desirable, because we want the command line options to be the same everywhere so that people can copy+paste commands from the documentation etc.

documentation: F#

Create an example that explains how to use MyMediaLite from F#, and how to implement a new recommender in F#.

active learning interface

Create an interface for active learning recommenders, i.e. recommenders that request certain items to be rated by a user in order to improve the predictive model.

chronological splits

Support chronological splits, both relative to user history and to absolute times.

--chronological-split=DATETIME

--chronological-split=RATIO

modularize .DLL files

MyMediaLite.dll : core library without external dependencies
MyMediaLite.SVM.dll : recommenders that need LIBSVM
MyMediaLite.Math.NET.dll : recommenders that need Math.NET

MyMediaLiteExperimental.dll : experimental code
MyMediaLiteExperimental.SVM.dll
MyMediaLiteExperimental.Math.NET.dll

sample training data

Only read in a certain percentage of the training data:

--sample-ratings=RATIO
--sample-users=RATIO
--sample-items=RATIO

support more relation types

Currently we have binary relations over users or items.

In the future, we additionally may want to have

  • ternary relations (tags)
  • n-ary relations
  • weighted relations
  • multiple relations over the same set (equivalent to labelled relations)
  • relations with time information
    etc.

common class for command-line programs

The current command-line programs for item and rating prediction share many concepts.
It may be worthwile to consider implementing those shared concepts in one class and deriving from it.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.