Coder Social home page Coder Social logo

zenogantner / mymedialite Goto Github PK

View Code? Open in Web Editor NEW
501.0 50.0 190.0 29.94 MB

recommender system library for the CLR (.NET)

Home Page: http://mymedialite.net

Shell 3.01% Makefile 0.62% C# 89.96% Perl 6.41%
collaborative-filtering evaluation item-prediction matrix-factorization rating-prediction recommender-systems

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

filters for item prediction

add pre- and post-filter APIs to MyMediaLite

pre-filters generate candidate lists

  • categories
  • already seen
  • ...

post-filter

  • diversification
  • thresholds

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.

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.

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

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!

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.

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.

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.

sample training data

Only read in a certain percentage of the training data:

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

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.

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.

documentation: F#

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

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.

Context-aware recommendation

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

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.

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.

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.

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)

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);

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.