Skip to content

Releases: lenskit/lkpy

Will It Blend?

09 Jan 21:32
Compare
Choose a tag to compare

This release cleans up dependency problems to make it easier to reliably install LensKit. We remove
some unused utility code that had compatibility problems.

  • Remove CSR.sort_values - we were no longer using this function, and it failed to compile with Numba 0.46.
  • Change dependency versions

Faster For Real This Time

10 Dec 23:07
Compare
Choose a tag to compare

This is the same as 0.8.0, with a couple of small build environment tweaks to properly deploy the release.

Not Sure About Further Or Higher, But Definitely Faster

10 Dec 22:58
Compare
Choose a tag to compare

See the GitHub milestone for full change list.

Infrastructure Updates

  • Dropped support for Python 3.5
  • Removed *args from Algorithm.fit, so additional data must be provided via keyword arguments
  • Made Algorithm.fit implementations consistently take **kwargs for hybrid flexibility

Algorithm Updates

  • Substantial performance and stability improvements to item-item
  • Added a coordinate descent solver to explicit-feedback ALS and made it the default. The old
    LU-based solver is still available with method='lu'.
  • Added a conjugate gradient solver to implicit-feedback ALS and made it the default.
  • Added a random recommender

The One With Empty Lists

19 May 01:21
Compare
Choose a tag to compare

See the GitHub milestone for full change list.

  • Use Joblib for parallelism in batch routines.
  • nprocs arguments are renamed to n_jobs for consistency with Joblib.
  • Removed parallel option on MultiEval algorithms, as it was unused.
  • Made MultiEval default to using each recommender's default candidate
    set, and adapt algorithms to recommenders prior to evaluation.
  • Make MultiEval require named arguments for most things.
  • Add support to MultiEval to save the fit models.
  • RecListAnalysis can optionally ensure all test users are returned, even
    if they lack recommendation lists.
  • Performance improvements to algorithms and evaluation.

Small perf & bug fixes

03 Apr 23:08
Compare
Choose a tag to compare

See the GitHub milestone for full change list.

  • Fix inconsistency in both code and docs for recommend list sizes for top-N evaluation.
  • Fix user-user to correctly use sum aggregate.
  • Improve performance and documentation

Easier and Correcter

06 Mar 15:20
Compare
Choose a tag to compare

Higlights:

  • 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.

See the GitHub milestone for issues and pull requests.

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.

The One With SciKit APIs

14 Jan 14:28
Compare
Choose a tag to compare

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 algo.fit(ratings).

We also have some new capabilities:

  • Ben Frederickson's Implicit library

As always, install with

conda install -c lenskit lenskit