A collection of recommendation algorithms and comparisons for Easy, Effective and Efficient experiments.
Clone or download
tqtg Merge pull request #38 from tqtg/master
Add back data tests
Latest commit cef7ae2 Jan 9, 2019



Cornac is python recommender system library for easy, effective and efficient experiments. Cornac is simple and handy. It is designed from the ground-up to faithfully reflect the standard steps taken by researchers to implement and evaluate personalized recommendation models.

Quick Links

Website | Documentation | Preferred.AI

TravisCI CircleCI AppVeyor Codecov Docs
Release PyPI Conda Conda Recipe
Python License


Currently, we are supporting Python 3 (version 3.6 is recommended). There are several ways to install Cornac:

  • From PyPI (you may need a C++ compiler):
pip3 install cornac
  • From Anaconda:
conda install cornac -c qttruong -c pytorch
  • From the GitHub source (for latest updates):
pip3 install cython
git clone https://github.com/PreferredAI/cornac.git
cd cornac
python3 setup.py install


Some installed dependencies are CPU versions. If you want to utilize your GPU, you might consider:

Getting started: your first Cornac experiment

Flow of an Experiment in Cornac

This example will show you how to run your very first experiment.

  • Load the MovieLens 100K dataset (will be automatically downloaded if not cached).
from cornac.datasets import MovieLens100K

ml_100k = MovieLens100K.load_data()
  • Instantiate an evaluation method. Here we split the data based on ratio.
from cornac.eval_methods import RatioSplit

ratio_split = RatioSplit(data=ml_100k, test_size=0.2, rating_threshold=4.0, exclude_unknowns=False)
  • Instantiate models that we want to evaluate. Here we use Probabilistic Matrix Factorization (PMF) as an example.
import cornac

pmf = cornac.models.PMF(k=10, max_iter=100, learning_rate=0.001, lamda=0.001)
  • Instantiate evaluation metrics.
mae = cornac.metrics.MAE()
rmse = cornac.metrics.RMSE()
rec_20 = cornac.metrics.Recall(k=20)
pre_20 = cornac.metrics.Precision(k=20)
  • Instantiate and then run an experiment.
exp = cornac.Experiment(eval_method=ratio_split,
                        metrics=[mae, rmse, rec_20, pre_20],


          MAE      RMSE  Recall@20  Precision@20
PMF  0.760277  0.919413   0.081803        0.0462

For more details, please take a look at our examples.


Apache License 2.0