Releases: lenskit/lkpy
No Longer Candide
This version of LensKit splits out the CSR routines into a separate CSR package, allowing LensKit to be a pure Python package.
This also makes a major change to TensorFlow BPR, using popularity-weighted negative sampling by default (this can be disabled with neg_weight=False
), and makes our TF recommenders much faster.
What’s Changed
- Use popularity-weighted sampling in BPR by default (#223) @mdekstrand
- Fix TF performance (#222) @mdekstrand
- Update to CSR 0.2 (#221) @mdekstrand
- use CSR from conda-forge (#220) @mdekstrand
- knn: don't add item means to similarity sums (#217) @mdekstrand
- Use flit to build LKPY (#219) @mdekstrand
- Remove CSR class in favor of separate library (#218) @mdekstrand
- Fix tests on MacOS OpenBLAS (#215) @mdekstrand
- Allow scipy='coo' in sparse_ratings (#214) @reppertj
- Add keystone test depending on others (#212) @mdekstrand
- Test on multiple BLAS versions (#211) @mdekstrand
- Support Numba 0.52 (#210) @mdekstrand
- Add option to drop user features after training ALS models (#209) @carlos10seg
- Add tests for ALS load/save (#207) @mdekstrand
Building It Live
This release is just to fix a build problem in 0.11.0 that prevented automatic package publication.
Let's Do It Live
This release brings a number of functionality and performance improvements. Highlights include:
- Refactoring the
Bias
model and using it consistently instead of re-implementing pieces in matrix factorizers - Support new ratings from a user in both ALS recommenders
- Fix crash when TensorFlow 1 is installed
The main-channel Conda packages for this release have disabled MKL support in macOS, due to environmental factors causing the build to fail. LensKit will still work fine in MKL environments, it just won't use its MKL-based k-NN acceleration on macOS. Linux and Windows are still unchanged. With 0.11, we will also begin publishing packages to conda-forge
; we expect MKL acceleration to work in that environment.
What’s Changed
- Update @actions/core for CI build (#205) @mdekstrand
- ALS: Refactor common matrix & fix tests (#204) @mdekstrand
- added new ratings for predict method in ImplicitMF (#202) @carlos10seg
- Remove BiasedMFPredictor in favor of Bias (#201) @mdekstrand
- Fix failures with unexpected parallel package installs (#199) @mdekstrand
- [DOC/FIX] Correction in ImplicitMF docstring (#196) @ShwetanshuSingh
- Add known-rating predictor (#182) (#184) @carlos10seg
- Move Bias class into
bias
package (#175) (#183) @carlos10seg - Bump @actions/core from 1.2.3 to 1.2.6 in /.github/actions/conda-env (#194) @dependabot
- Bump Numba support to 0.51 (#186) @mdekstrand
- Fix ALS run-time training (#114) for empty rating series (#187) @carlos10seg
- Add run-time training to ALS BiasedMF (#114) (#173) @carlos10seg
- Add transform_user and inverse_transform_user methods to bias. (#181) @carlos10seg
Better Processes
This release makes some improvements to multi-process support and item-item kNN resource use.
What’s Changed
- Manage random seeds in subprocesses (#179) @mdekstrand
- Support Numba 0.50 (#178) @mdekstrand
- Use parallel blocks for SciPy-based item-item CF training (#177) @mdekstrand
- Improve MP worker detection and disable item-item parallelism when run under MP (#176) @mdekstrand
- Use Hypothesis for testing and clean up tests (#172) @mdekstrand
- Remove unused math routines (#171) @mdekstrand
Flow
Highlights of this release are significant improvements to parallel processing (we no longer use joblib), shared memory, and our first TensorFlow integrations.
What’s Changed
- Reorganize and improve documentation (#169) @mdekstrand
- Improve RecListAnalysis performance and parallelize (#164) @mdekstrand
- Make persistence configurable & reduce open file count (#165) @mdekstrand
- Fix Python versions and conda environments in CI builds (#163) @mdekstrand
- Add TensorFlow support (#159) @mdekstrand
- Improve parallel configuration and docs (#161) @mdekstrand
- Use setup.cfg for all dev deps, including in Conda (#160) @mdekstrand
- Add fit_transform API to Bias (#158) @mdekstrand
- Remove dead code and add tests (#157) @mdekstrand
- Add scikit-learn SVD (#156) @mdekstrand
- Remove old sharing and file APIs (#155) @mdekstrand
- Use ProcessPoolExecutor instead of joblib (#154) @mdekstrand
- Add 'persist' API to sharing (#153) @mdekstrand
Gone in 60 Seconds
This release has some performance and improvements, including full Python 3.8, Pandas 1.0, and Numba 0.49 testing.
This is the last release we expect to use JobLib to parallelize batch prediction and recommendation. Any Python scripts that call the batch routines (batch.predict
, batch.recommend
, or MultiEval
) need to be import-protected: their code needs to be in functions, and only invoked with a __name__
guard:
if __name__ = '__main__':
do_stuff()
Unprotected scripts (where the code is just in the script, and runs when the script is imported as a module) will probably still work with LensKit 0.9, but will not work in the next version of LensKit. Jupyter notebooks should be just fine - when they are run, the IPython kernel is actually running, and it is properly protected.
What’s Changed
- Improving testing with minimal dependencies (#151) @mdekstrand
- Skip predictions when no ratings to predict (#149) @mdekstrand
- Use BinPickle for sharing (#148) @mdekstrand
- Support iterating over training iterations (#144) @mdekstrand
- Fix for Numba 0.49 compatibility (#146) @mdekstrand
- Use GitHub Actions for CI (#143) @mdekstrand
- Use declarative configuration for builds (#142) @mdekstrand
- Add model stores for batch multiprocessing (#139) @mdekstrand
- Improve top-N metric performance (#140) @mdekstrand
- Fix Conda Python 3.8 testing (#138) @mdekstrand
- Unify configuration points (#137) @mdekstrand
- Clean up RNG infrastructure (#136) @mdekstrand
- Add configurable RNG infrastructure (#135) @mdekstrand
- Remove deprecated and unused features (#134) @mdekstrand
- Version bumps - Pandas 1.0 and Python 3.8 (#133) @mdekstrand
Will It Blend?
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
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
See the GitHub milestone for full change list.
Infrastructure Updates
- Dropped support for Python 3.5
- Removed
*args
fromAlgorithm.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 withmethod='lu'
. - Added a conjugate gradient solver to implicit-feedback ALS and made it the default.
- Added a random recommender
The One With Empty Lists
See the GitHub milestone for full change list.
- Use Joblib for parallelism in batch routines.
nprocs
arguments are renamed ton_jobs
for consistency with Joblib.- Removed
parallel
option onMultiEval
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.