Recent Releases of lenskit

lenskit - Release fix for 2025.3.0a3

Small fix to the release process for 2025.3.0a3.

- Python
Published by mdekstrand 9 months ago

lenskit - Lots of performance improvements, mostly

This version includes a lot of performance improvements along with some ergonomic advances to logging, better exports, and some new metrics. Along with a handful of bug fixes. And Amazon data set import.

2025.3.0 is coming soon.

What's Changed

  • Add versions to dataset schemas by @mdekstrand in https://github.com/lenskit/lkpy/pull/721
  • Add SparseRow extension type for CSRs in Arrow by @mdekstrand in https://github.com/lenskit/lkpy/pull/722
  • Use Rust to accelerate negative sampling by @mdekstrand in https://github.com/lenskit/lkpy/pull/723
  • Re-add progress bars and signal checking to Item KNN builder by @mdekstrand in https://github.com/lenskit/lkpy/pull/724
  • Add ndarray dep and use it for sampling by @mdekstrand in https://github.com/lenskit/lkpy/pull/725
  • Use Maturin to simplify build setup by @mdekstrand in https://github.com/lenskit/lkpy/pull/726
  • Reduce base structure memory consumption by @mdekstrand in https://github.com/lenskit/lkpy/pull/728
  • Add Rust acceleration to User KNN by @mdekstrand in https://github.com/lenskit/lkpy/pull/730
  • Rewrite ALS solvers in Rust by @mdekstrand in https://github.com/lenskit/lkpy/pull/731
  • Rewrite FunkSVD in Rust by @mdekstrand in https://github.com/lenskit/lkpy/pull/732
  • Build with ABI3 and maturin-action by @mdekstrand in https://github.com/lenskit/lkpy/pull/733
  • Add SPEC-1 (Lazy Loading) and incorporate version numbers into docs by @mdekstrand in https://github.com/lenskit/lkpy/pull/736
  • Implement is_sorted for matrix tables in Rust by @mdekstrand in https://github.com/lenskit/lkpy/pull/737
  • Correctly detect no-genre movies in MovieLens by @mdekstrand in https://github.com/lenskit/lkpy/pull/738
  • Adding Mean Average Precision by @albus-droid in https://github.com/lenskit/lkpy/pull/739
  • Add tests to avoid overflow in softmax stochastic sampling by @mdekstrand in https://github.com/lenskit/lkpy/pull/742
  • Add configurable weighting models by @mdekstrand in https://github.com/lenskit/lkpy/pull/744
  • Parallelize item-item scoring by @mdekstrand in https://github.com/lenskit/lkpy/pull/745
  • Support comma-separated lists for uniform nested parallelism configuration by @mdekstrand in https://github.com/lenskit/lkpy/pull/746
  • Test and fix crash on Linux ARM by @mdekstrand in https://github.com/lenskit/lkpy/pull/748
  • Update ALS solve to zero rows for no-info users/items by @mdekstrand in https://github.com/lenskit/lkpy/pull/749
  • Add importers for UCSD Amazon data by @mdekstrand in https://github.com/lenskit/lkpy/pull/751
  • refactor FlexMF with less string compares by @mdekstrand in https://github.com/lenskit/lkpy/pull/752
  • Add sklearn NMF as a scorer by @FroggoLight in https://github.com/lenskit/lkpy/pull/741
  • Speed up ItemList isin checks and evaluation metrics by @mdekstrand in https://github.com/lenskit/lkpy/pull/753
  • Speed up ItemList indexing by @mdekstrand in https://github.com/lenskit/lkpy/pull/754
  • Add Gini coefficient metrics by @mdekstrand in https://github.com/lenskit/lkpy/pull/755
  • Speed up weight computations by @mdekstrand in https://github.com/lenskit/lkpy/pull/756
  • Speed up weighted metrics by @mdekstrand in https://github.com/lenskit/lkpy/pull/757
  • Add ItemList.top_n and speed up ItemList operations by @mdekstrand in https://github.com/lenskit/lkpy/pull/758
  • Add subprocess progress reporting by @mdekstrand in https://github.com/lenskit/lkpy/pull/759

New Contributors

  • @albus-droid made their first contribution in https://github.com/lenskit/lkpy/pull/739
  • @FroggoLight made their first contribution in https://github.com/lenskit/lkpy/pull/741

Full Changelog: https://github.com/lenskit/lkpy/compare/v2025.3.0a2.post2...v2025.3.0a3

- Python
Published by mdekstrand 9 months ago

lenskit - Fix 2025.3.0a2 again

Now that I've found the problem, let's fix the release!

- Python
Published by mdekstrand 10 months ago

lenskit - Fix 2025.3.0a2

This is just to fix a release problem in 2025.3.0a2.

- Python
Published by mdekstrand 10 months ago

lenskit - Now with Rust

This adds Rust-based acceleration to item KNN, and more acceleration will be coming in the 2025.3.0 release.

This is the first attempt to publish binary wheels to PyPI, so the exact release may break.

What's Changed

  • Add Rust extension infrastructure and accelerate ItemKNN by @mdekstrand in https://github.com/lenskit/lkpy/pull/715
  • Replace just with invoke for development tasks by @mdekstrand in https://github.com/lenskit/lkpy/pull/716

Full Changelog: https://github.com/lenskit/lkpy/compare/v2025.3.0a1...v2025.3.0a2

- Python
Published by mdekstrand 10 months ago

lenskit - Preview: FlexMF and better Ray

This rolls up some changes and incoming improvements for preview release, as we are preparing for the 2025.3 release.

What's Changed

  • Simplify test workfow by @mdekstrand in https://github.com/lenskit/lkpy/pull/666
  • Add StochasticTopNSampler to be correct version of "softmax" sampler by @mdekstrand in https://github.com/lenskit/lkpy/pull/667
  • Add flexible Torch matrix factorizer by @mdekstrand in https://github.com/lenskit/lkpy/pull/668
  • Export configuration classes from lenskit.basic by @mdekstrand in https://github.com/lenskit/lkpy/pull/672
  • Improve logging in Ray cluster setups by @mdekstrand in https://github.com/lenskit/lkpy/pull/673
  • Limit test users to only have users who had item in the train data. by @sushobhan2024 in https://github.com/lenskit/lkpy/pull/676
  • Add train and recommend commands to the CLI by @mdekstrand in https://github.com/lenskit/lkpy/pull/677
  • Improve NumPy -> Torch conversions for read-only data by @mdekstrand in https://github.com/lenskit/lkpy/pull/680
  • Reduce excess matrix manipulations in item-KNN by @mdekstrand in https://github.com/lenskit/lkpy/pull/678
  • Improve progress bar update API by @mdekstrand in https://github.com/lenskit/lkpy/pull/681
  • Update FlexMF parameters to better defaults by @mdekstrand in https://github.com/lenskit/lkpy/pull/682
  • Run Doctor under coverage by @mdekstrand in https://github.com/lenskit/lkpy/pull/683
  • Use uv for development environments instead of pixi by @mdekstrand in https://github.com/lenskit/lkpy/pull/700
  • Add lenskit.state module and move the ParameterContainer interface by @mdekstrand in https://github.com/lenskit/lkpy/pull/702
  • Create and use separate ModelTrainer objects by @mdekstrand in https://github.com/lenskit/lkpy/pull/701
  • Support training checkpointing in ALS by @mdekstrand in https://github.com/lenskit/lkpy/pull/704
  • Add CPU & GPU groups by @mdekstrand in https://github.com/lenskit/lkpy/pull/706
  • Improve logging and reduce sorting in dataset relationships by @mdekstrand in https://github.com/lenskit/lkpy/pull/707
  • Improve debug logging and add xopen to CLI by @mdekstrand in https://github.com/lenskit/lkpy/pull/708
  • Introduce WARP loss to FlexMF by @mdekstrand in https://github.com/lenskit/lkpy/pull/709
  • Build with setuptools instead of hatch by @mdekstrand in https://github.com/lenskit/lkpy/pull/710
  • Add better compression support to CLI by @mdekstrand in https://github.com/lenskit/lkpy/pull/712
  • Update pre-commit hook versions by @mdekstrand in https://github.com/lenskit/lkpy/pull/713

New Contributors

  • @sushobhan2024 made their first contribution in https://github.com/lenskit/lkpy/pull/676

Full Changelog: https://github.com/lenskit/lkpy/compare/v2025.2.0...v2025.3.0a1

- Python
Published by mdekstrand 10 months ago

lenskit - 2025 Feature Update

A few small feature updates for LensKit 2025.

What's Changed

  • Support auto-detecting key columns in ItemListCollection.from_df by @mdekstrand in https://github.com/lenskit/lkpy/pull/659
  • Support dataframe-format test data for batch recommendation by @mdekstrand in https://github.com/lenskit/lkpy/pull/660
  • Add PipelineCache to allow pipeline builders to cache component instances by @mdekstrand in https://github.com/lenskit/lkpy/pull/661
  • Only warn once for users with missing test items in analysis by @mdekstrand in https://github.com/lenskit/lkpy/pull/664

Full Changelog: https://github.com/lenskit/lkpy/compare/v2025.1.1...v2025.2.0

- Python
Published by mdekstrand 12 months ago

lenskit - LensKit 2025

This is the first release in the new LensKit series, 2025.1.1!

LensKit 2025.1.1 brings a new design to LensKit, with a new generation of APIs that will enable better future flexibility and capability, and make it a lot easier to see the various software capabilities. It will also be easier to add new capabilities, such as content-based and knowledge-based recommenders.

We have plans for a lot of great new things on top of this new foundation, but code written for LensKit 0.14 and earlier will need to be udpated. See the migration guide for details.

- Python
Published by mdekstrand 12 months ago

lenskit - Better logging

Improved logging and metrics — almost there!

What's Changed

  • Add meaningful error on duplicate metrics by @mdekstrand in https://github.com/lenskit/lkpy/pull/653
  • Fix logic for monitors in nested workers by @mdekstrand in https://github.com/lenskit/lkpy/pull/654

Full Changelog: https://github.com/lenskit/lkpy/compare/v2025.1.1rc4...v2025.1.1rc5

- Python
Published by mdekstrand 12 months ago

lenskit - Move around util and clean up

Not super happy with this being in an RC series, but this removes some old util code, keeping a deprecated shim for a bit, and adds the lenskit doctor command, along with multiple negatives in negative sampling.

- Python
Published by mdekstrand 12 months ago

lenskit - Fix ItemList.from_arrow

This fixes a bug in ItemList.from_arrow when a column has null values.

- Python
Published by mdekstrand 12 months ago

lenskit - CLI plugins for testing

Quick update to refactor CLI into a plugin-based design so one of the client projects can add new CLI commands.

- Python
Published by mdekstrand 12 months ago

lenskit - First release candidate

We're about ready for 2025.1.1! Just need some final compatibility checks in downstreams.

- Python
Published by mdekstrand 12 months ago

lenskit - Monopackage, API, docs

What's Changed

  • Rename RunAnalysis.compute to .measure by @mdekstrand in https://github.com/lenskit/lkpy/pull/637
  • Refactor and document dataset classes by @mdekstrand in https://github.com/lenskit/lkpy/pull/638
  • Make LensKit a single package again by @mdekstrand in https://github.com/lenskit/lkpy/pull/640
  • Add CLI tests and fix name of ml-latest-small by @mdekstrand in https://github.com/lenskit/lkpy/pull/641
  • Add Pipeline.modify to create modified copies of pipelines by @mdekstrand in https://github.com/lenskit/lkpy/pull/643
  • Improve pipeline modification and documentation by @mdekstrand in https://github.com/lenskit/lkpy/pull/644

Full Changelog: https://github.com/lenskit/lkpy/compare/v2025.1.1b11...v2025.1.1b12

- Python
Published by mdekstrand 12 months ago

lenskit - Much better logging

This provides better logging output, and fixes a small documentation error.

- Python
Published by mdekstrand about 1 year ago

lenskit - Data bug + RBP default

This changes the RBP default to 0.85, and fixes a data set bug. Also introduces experimental Ray support.

- Python
Published by mdekstrand about 1 year ago

lenskit - Add negative sampling

This adds negative sampling and COO matrix data to the matrix relationship set.

- Python
Published by mdekstrand about 1 year ago

lenskit - Fix obscure user-KNN bug

This fixes some bugs when the rating data is float64. This is not triggered by usual pathways, but some nonstandard data loading logic may activate it.

What's Changed

  • Test and fix components when input ratings are doubles by @mdekstrand in https://github.com/lenskit/lkpy/pull/630

Full Changelog: https://github.com/lenskit/lkpy/compare/v2025.1.1b7...v2025.1.1.b8

- Python
Published by mdekstrand about 1 year ago

lenskit - Fix RMSE bug + temporal split

What's Changed

  • Add fractional temporal splitting by @mdekstrand in https://github.com/lenskit/lkpy/pull/628
  • don't crash on empty lists in RMSE by @mdekstrand in https://github.com/lenskit/lkpy/pull/629

Full Changelog: https://github.com/lenskit/lkpy/compare/v2025.1.1b6...v2025.1.1b7

- Python
Published by mdekstrand about 1 year ago

lenskit - Now with a command line!

This adds an initial LensKit command-line utility and some small quality-of-life bits.

What's Changed

  • Add utility function to load seeds from configuration files by @mdekstrand in https://github.com/lenskit/lkpy/pull/625
  • Add Markdown dataset statistics by @mdekstrand in https://github.com/lenskit/lkpy/pull/626
  • Add LensKit CLI tool and move data tools into it by @mdekstrand in https://github.com/lenskit/lkpy/pull/627

Full Changelog: https://github.com/lenskit/lkpy/compare/v2025.1.1b5...v2025.1.1b6

- Python
Published by mdekstrand about 1 year ago

lenskit - Small user-user bug fix

Fix for a small type error in user-user CF, found by a student.

- Python
Published by mdekstrand about 1 year ago

lenskit - Fourth beta - training config and splitting

This includes some small fixes and improvements:

  • upper bound on temporal split
  • popularity metric
  • better CUDA configuration
  • better iterative training logging

What's Changed

  • [MINOR:fix link] Update README.md by @cakiki in https://github.com/lenskit/lkpy/pull/621
  • Add a popularity metric by @mdekstrand in https://github.com/lenskit/lkpy/pull/622
  • add upper bound for global temporal split by @mdekstrand in https://github.com/lenskit/lkpy/pull/623

New Contributors

  • @cakiki made their first contribution in https://github.com/lenskit/lkpy/pull/621

Full Changelog: https://github.com/lenskit/lkpy/compare/v2025.1.1b3...v2025.1.1b4

- Python
Published by mdekstrand about 1 year ago

lenskit - Third beta

Mostly documentation fixes, plus some consistency work on model configuration.

- Python
Published by mdekstrand about 1 year ago

lenskit - Second beta

Second beta release, with working MovieLens full content data loaders and dataset attributes.

- Python
Published by mdekstrand about 1 year ago

lenskit - Beta — let others start using the code

There are a few more things to add and test before rolling 2025.1, but with the new data model changes I'm going to call it betea.

What's Changed

  • Separate PipelineBuilder from Pipeline and update run api by @mdekstrand in https://github.com/lenskit/lkpy/pull/606
  • Re-add unnormalized DCG metric by @mdekstrand in https://github.com/lenskit/lkpy/pull/608
  • Add ARM and Windows vanilla Python to CI runs by @mdekstrand in https://github.com/lenskit/lkpy/pull/609
  • Implement data set builders and the new entity/relationship model by @mdekstrand in https://github.com/lenskit/lkpy/pull/610
  • Simplify training history components with new dataset by @mdekstrand in https://github.com/lenskit/lkpy/pull/612
  • Make vocabularies immutable and stop using copy() by @mdekstrand in https://github.com/lenskit/lkpy/pull/611
  • Tweaks for live class demo by @mdekstrand in https://github.com/lenskit/lkpy/pull/613

Full Changelog: https://github.com/lenskit/lkpy/compare/v2025.0.0a6...v2025.1.0b1

- Python
Published by mdekstrand about 1 year ago

lenskit - Small component typing update

This is a very small bump that adds better component base class typing.

What's Changed

  • Update component configuration type warnings by @mdekstrand in https://github.com/lenskit/lkpy/pull/603

Full Changelog: https://github.com/lenskit/lkpy/compare/v2025.0.0a5...v2025.0.0a6

- Python
Published by mdekstrand about 1 year ago

lenskit - Alpha 5: configuration

Mostly changes around the component API:

  • use Pydantic models for configuration
  • update Trainable interface to take training options
  • add iterative training interface

What's Changed

  • Use Pydantic models for component configurations by @mdekstrand in https://github.com/lenskit/lkpy/pull/596
  • Re-add return type variable for Component by @mdekstrand in https://github.com/lenskit/lkpy/pull/598
  • Migrate HPF to configuration object and fix BiasConfig serialization by @mdekstrand in https://github.com/lenskit/lkpy/pull/600
  • Move Trainable interface and add TrainingOptions by @mdekstrand in https://github.com/lenskit/lkpy/pull/599
  • Add iterative training API by @mdekstrand in https://github.com/lenskit/lkpy/pull/601
  • rename "Lenskit" to LensKit for consistency by @mdekstrand in https://github.com/lenskit/lkpy/pull/602

Full Changelog: https://github.com/lenskit/lkpy/compare/v2025.0.0a4...v2025.0.0a5

- Python
Published by mdekstrand about 1 year ago

lenskit - Alpha 4: performance

Mostly some performance and logging / debugging improvements, along with some refactors.

What's Changed

  • Update pre-commit hook versions by @mdekstrand in https://github.com/lenskit/lkpy/pull/594
  • Add directory check in save_parquet by @samiravaez in https://github.com/lenskit/lkpy/pull/593
  • Refactor Pipeline into private submodule and improve documentation by @mdekstrand in https://github.com/lenskit/lkpy/pull/595
  • Speed up popularity scoring and top-N ranking by @mdekstrand in https://github.com/lenskit/lkpy/pull/597

New Contributors

  • @samiravaez made their first contribution in https://github.com/lenskit/lkpy/pull/593

Full Changelog: https://github.com/lenskit/lkpy/compare/v2025.0.0a3...v2025.0.0a4

- Python
Published by mdekstrand about 1 year ago

lenskit - 3rd Alpha — logging and version fixes

This improves some error messages, logging, and versioning; and tags a prerelease before doing data and configuration improvements.

What's Changed

  • emit higher-quality error message on node failure by @mdekstrand in https://github.com/lenskit/lkpy/pull/584
  • Add support for 12Factor-style JSON logging by @mdekstrand in https://github.com/lenskit/lkpy/pull/591
  • Fix NumPy/PyTorch version problem and item KNN type problem w/ NumPy array by @mdekstrand in https://github.com/lenskit/lkpy/pull/592

Full Changelog: https://github.com/lenskit/lkpy/compare/v2025.0.0a2...v2025.0.0a3

- Python
Published by mdekstrand about 1 year ago

lenskit - Second 2025 Prerelease

This rolls up a number of new changes and bugfixes in the run up to 2025.1.

What's Changed

  • Move LensKit test support into lenskit.testing package by @mdekstrand in https://github.com/lenskit/lkpy/pull/575
  • Add user/item vocab options and subsetting to frominteractionsdf by @mdekstrand in https://github.com/lenskit/lkpy/pull/577
  • Implement and use common component test suites by @mdekstrand in https://github.com/lenskit/lkpy/pull/576
  • Accelerate item-item k-NN algorithms by @mdekstrand in https://github.com/lenskit/lkpy/pull/578
  • Modest user-KNN speedups + item KNN logging by @mdekstrand in https://github.com/lenskit/lkpy/pull/579
  • Add basic_logging function and use it in the GettingStarted notebook by @mdekstrand in https://github.com/lenskit/lkpy/pull/580
  • Add stability declarations to documentation by @mdekstrand in https://github.com/lenskit/lkpy/pull/581
  • Add predict_pipeline, remove data.bulk module, and clean up batch functions by @mdekstrand in https://github.com/lenskit/lkpy/pull/582
  • Implement a proxy logger that suppresses debug & info messages by default by @mdekstrand in https://github.com/lenskit/lkpy/pull/583

Full Changelog: https://github.com/lenskit/lkpy/compare/v2025.0.0a1...v2025.0.0a2

- Python
Published by mdekstrand about 1 year ago

lenskit - Initial PyPI 2025 release

This is the first pre-release of LensKit 2025 to PyPI.

- Python
Published by mdekstrand about 1 year ago

lenskit - Quick bugfix

This fixes a bug in the util.clone function where it incorrectly cloned tuples as lists.

- Python
Published by mdekstrand about 2 years ago

lenskit - 0.14 Dependency Updates

This is a small compatibility update for 0.14 to support Python 3.11, newer Numba, and Pandas 2.

What's Changed

  • Support Python 3.11 & Numba 0.58 by @mdekstrand in https://github.com/lenskit/lkpy/pull/355

Full Changelog: https://github.com/lenskit/lkpy/compare/0.14.2...0.14.3

- Python
Published by mdekstrand about 2 years ago

lenskit - Dependency Updates

This release just bumps dependencies to enable and test support for Numba 0.56; also bumps up the minimum SciPy version to make the tests pass reliably (the minimum version is still several years old).

What's Changed

  • Use external build tools for 0.14 fix releases by @mdekstrand in https://github.com/lenskit/lkpy/pull/321
  • Support Numba 0.56 in 0.14 series by @mdekstrand in https://github.com/lenskit/lkpy/pull/322

Full Changelog: https://github.com/lenskit/lkpy/compare/0.14.1...0.14.2

- Python
Published by mdekstrand over 3 years ago

lenskit - Fix truncated nDCG bug

This release fixes #309, a bug in which the nDCG metric was not correctly computed when k is smaller than the recommendation list.

What's Changed

  • Fix nDCG truncation bug (#309) by @mdekstrand in #310.

Full Changelog: https://github.com/lenskit/lkpy/compare/0.14.0...0.14.1

- Python
Published by mdekstrand almost 4 years ago

lenskit - Cleaning Up

This release has a lot of cleanups and refactorings. Highlights:

  • ⚠️ MultiEval's deprecation has been upgraded to removal
  • ⚠️ ImplicitMF's default has changed to no longer use rating values, even if they are present (old behavior is still an option)
  • The k-NN recommenders now have an easier way to configure the typical setup for implicit feedback.
  • Algorithms using heavy external code, and bridges to other systems, have been moved to their own packages to be released shortly. This includes the HPF recommender, TensorFlow recommenders, and Ben Frederickson's 'implicit' library. Moving these into their own repositories will decrease maintenance overhead on the main LensKit project, and should also make installation easier.
  • Python 3.10 is now supported.

See the detailed release notes below for more information.

This will be the last release series tested against Python 3.7. Further patch releases (e.g. a 0.14.1) will be tested on 3.7, but 0.15 will drop 3.7 support as per NEP 29. NEP 29 would allow us to drop 3.7 with this release, but I'm keeping it since it's been so long since the last LensKit release.

What’s Changed

  • Clean up missing documentation & bad links (#299) @mdekstrand

⚠ Breaking Changes

  • Change ImplicitMF to default to not use ratings (#298) @mdekstrand
  • Remove MultiEval (#277) @mdekstrand

🐜 Bug Fixes

  • Correctly include missing user scores with multiple runs (#293) @mdekstrand

📏 Evaluation Support

  • Fix index output from top-N evaluation (#306) @mdekstrand
  • Add a hit metric to compute hit rates (#303) @mdekstrand
  • Document formulas for all metrics (#302) @mdekstrand
  • Correctly include missing user scores with multiple runs (#293) @mdekstrand
  • Raise an error when attempting to split a data frame with a non-unique index (#272) @keener101
  • Remove MultiEval (#277) @mdekstrand

🧩 Algorithms

  • Add AllItemsCandidateSelector (#304) @mdekstrand
  • Change ImplicitMF to default to not use ratings (#298) @mdekstrand
  • Add feedback modes to k-NN recommenders (#297) @mdekstrand
  • Add use_ratings switch to item-item k-NN (#296) @mdekstrand
  • Split TensorFlow into a separate package (#283) @mdekstrand
  • Split implicit wrappers into new package (#281) @mdekstrand
  • Split HPF into a separate package (#270) @mdekstrand
  • Improve item-item docs and diagnostics for implicit feedback (#275) @mdekstrand

🧱 Internals

  • Disable SharedMemory on Windows and improve testing (#301) @mdekstrand

🔧 Maintenance

  • Reduce CI build load (#300) @mdekstrand
  • Update Conda build matrix (#295) @mdekstrand
  • Test Python 3.10 on Conda (#294) @mdekstrand
  • Test against Python 3.10 and Numba 0.55 pre-release (#292) @mdekstrand
  • Switch from PowerShell to Invoke tasks (#291) @mdekstrand
  • Share BibTeX retrieval across LensKit projects (#286) @mdekstrand
  • Upload coverage at end of build pipeline (#284) @mdekstrand
  • Update to PEP 621 and better folder naming (#280) @mdekstrand
  • Depend on Pandas 1.0 or newer (#279) @mdekstrand
  • Support Numba 0.54 (#278) @mdekstrand
  • Use conda-lock for build environments (#276) @mdekstrand
  • Use BibTeX for references (#273) @mdekstrand
  • Fix flit-conda build (#274) @mdekstrand

- Python
Published by github-actions[bot] about 4 years ago

lenskit - Little bug fix

Just a little bug fix for Bias (doesn't affect correctness, just makes documented configuration options actually work instead of throwing an exception).

What’s Changed

  • Fix bias transform with disabled users/items (#268) @mdekstrand

- Python
Published by github-actions[bot] over 4 years ago

lenskit - LensKit 0.13.0 - critical bugs fixed

We're pleased to release LensKit 0.13!

Major Fixes

This release includes two critical fixes, for which everyone should upgrade:

  • The Bias model's transform and inverse_transform methods were incorrect (#265). These bugs did not affect Bias when used as a predictor or a recommender, but they did affect any model using Bias as a normalization step, namely the biased matrix factorizers (since version 0.11, when this API was added).
  • Previous versions of LensKit did not clean up temporary files (or, on Python 3.8 and later, shared memory resources) when running parallel evaluation processes.

It also includes significant performance improvements and code to detect common problems with parallel processing configurations, and is tested on Python 3.9 and on Linux AArch64 (64-bit ARM).

Future Changes

This release deprecates two sets of APIs that will be removed in LensKit 0.14:

  • MultiEval (#254) - it doesn't work well for realistic projects, and simple evaluations are easy enough to write in a loop, so we will be removing MultiEval to reduce our maintenance burden going forward.
  • RNG seed management APIs - these are replaced by seedbank. In 0.13, the APIs are kept as compatibility shims for their SeedBank replacements, but we will remove them in 0.14 in favor of directly calling seedbank.

We haven't yet adopted any formal deprecation policies for LensKit, but my current tentative plan is to use this next-release cadence for nontrivial removals while we're still releasing 0.x versions; once we decide to bump to 4.x, we will use semantic versioning on all public APIs, and thus deprecations will not be enforced until the next major release.

In a future LensKit, I tentatively plan to factor out several of our bridges (TensorFlow, Implicit, HPF) into separate projects. We will keep compatibility imports for at least one 0.x release, and probably until 4.0. This will reduce the development overhead of the LensKit core.

What’s Changed

  • Remove fastparquet import (#266) @mdekstrand
  • Fix incorrect user bias transformation (#265) @mdekstrand
  • Revise dependency specifications (#264) @mdekstrand
  • Update deprecation notices (#263) @mdekstrand
  • Detect problems with runtime environments (#248) @mdekstrand
  • Add use_ratings option to ImplicitMF (#245) @mdekstrand
  • Add 'k' support to top-N metrics (#247) @mdekstrand
  • Further Top-N optimization updates (#242) @mdekstrand
  • Free shared memory in parallel (#243) @mdekstrand
  • Optimize top-N analysis (#237) @mdekstrand
  • Add PlackettLuce stochastic ranking algorithm (#241) @mdekstrand
  • Add PopScore algorithm for popularity-based scoring (#240) @mdekstrand
  • Refactor ranking into a 'ranking' module (#239) @mdekstrand
  • Enable tests on Python 3.9 (#234) @mdekstrand
  • Deprecate MultiEval (#238) @mdekstrand
  • Add more logging output to parallelism code (#236) @mdekstrand
  • Add convenience prediction accuracy functions (#235) @mdekstrand

- Python
Published by github-actions[bot] over 4 years ago

lenskit - Really publish

This actually publishes the 0.12 bump, a tagging error prevented 0.12.2 from going out.

- Python
Published by mdekstrand almost 5 years ago

lenskit - Education Bugfixes

This release contains the sampling function refactor (#230), and documentation improvements.

- Python
Published by mdekstrand almost 5 years ago

lenskit - The Clone SVDs

Small bug-fix release.

What’s Changed

  • Fix cloning SVD (#224) @mdekstrand

- Python
Published by release-drafter[bot] almost 5 years ago

lenskit - 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

- Python
Published by release-drafter[bot] about 5 years ago

lenskit - Building It Live

This release is just to fix a build problem in 0.11.0 that prevented automatic package publication.

- Python
Published by mdekstrand over 5 years ago

lenskit - 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 transformuser and inversetransform_user methods to bias. (#181) @carlos10seg

- Python
Published by release-drafter[bot] over 5 years ago

lenskit - 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

- Python
Published by release-drafter[bot] over 5 years ago

lenskit - 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

- Python
Published by release-drafter[bot] over 5 years ago

lenskit - 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

- Python
Published by release-drafter[bot] over 5 years ago

lenskit - 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

- Python
Published by mdekstrand about 6 years ago

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

- Python
Published by mdekstrand about 6 years ago

lenskit - 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 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

- Python
Published by mdekstrand about 6 years ago

lenskit - The One With Empty Lists

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.

- Python
Published by mdekstrand almost 7 years ago

lenskit - Small perf & bug fixes

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

- Python
Published by mdekstrand almost 7 years ago

lenskit - Easier and Correcter

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.

- Python
Published by mdekstrand almost 7 years ago

lenskit - The One With SciKit APIs

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

- Python
Published by mdekstrand about 7 years ago