Release Notes


See the GitHub milestone for a summary of what’s happening!

  • The save and load methods on algorithms have been removed. Just pickle fitted models to save their data. This is what SciKit does, we see no need to deviate.
  • The APIs and model structures for top-N recommendation is reworked to enable algorithms to produce recommendations more automatically. The Recommender interfaces now take a CandidateSelector to determine default candidates, so client code does not need to compute candidates on their own. One effect of this is that the batch.recommend function no longer requires a candidate selector, and there can be problems if you call Recommender.adapt before fitting a model.
  • Top-N evaluation has been completely revamped to make it easier to correctly implement and run evaluation metrics. Batch recommend no longer attaches ratings to recommendations. See Top-N evaluation for details.
  • Batch recommend & predict functions now take nprocs as a keyword-only argument.
  • Several bug fixes and testing improvements.

Internal Changes

These changes should not affect you if you are only consuming LensKit’s algorithm and evaluation capabilities.

  • Rewrite the CSR class to be more ergonomic from Python, at the expense of making the NumPy jitclass indirect. It is available in the .N attribute. Big improvement: it is now picklable.


LensKit 0.5.0 modifies the algorithm APIs to follow the SciKit design patterns instead of our previous custom patterns. Highlights of this change:

  • Algorithms are trained in-place — we no longer have distinct model objects.
  • Model data is stored as attributes on the algorithm object that end in _.
  • Instead of writing model = algo.train_model(ratings), call

We also have some new capabilities:

  • Ben Frederickson’s Implicit library


A number of improvements, including replacing Cython/OpenMP with Numba and adding ALS.


A lot of fixes to get ready for RecSys.


Hello, world!