Release notes for LensKit 1.1
The Git changelog and the list of closed tickets and pull requests provide more information on what has happened, including bugs that have been fixed.
This release requires some recommender configuration changes, as well as changes to any custom components depending on LensKit parameter annotations; see Upgrading to LensKit 1.1 for details on how to do this.
There are quite a few changes in LensKit 1.1; this list is not exhaustive, but tries to capture highlights and things that will affect current users.
-
Made
Recommender
extendCloseable
(#issue(315)). -
Added side channel support to sparse vectors (#issue(185)).
-
Added support for at context matchers (via Grapht), to make it easier to configure complex configurations. See the manual for more details.
-
Made
SparseVector
constructors package-private. Sparse vectors shouldn’t be subclassed by any additional classes. -
Config change: introduced
predict
methods toRatingPredictor
, deprecating the fact that it extendsItemScorer
(#issue(164)). As a result, all algorithm item scorers now implementItemScorer
, notRatingPredictor
, and new rating predictors fill in the old jobs. The upgrading guide, #164, and #311 contain more details. -
Incompatible change: moved abstract and simple/score-based implementations of basic recommender components to the new package
o.g.l.basic
. This should only be incompatible for people implementing new LensKit components. -
Config change: Removed dedicated
params
packages, moving parameters to saner locations (#issue(294)). See the upgrading guide for details. -
Many little cleanups and bug-fixes.
-
Lots more automatic testing support.
Algorithms
-
Item-item scorers now report the number of neighbors used for each score as a side channel.
-
Deprecated algorithm-specific item recommenders in favor of using
ScoreBasedItemRecommender
directly. -
Added
LeastSquaresPredictor
, a baseline predictor that uses gradient descent to train per-item and per-user baseline values (à la Koren et al.).
k-NN Recommenders
-
Default change: changed default
ModelSize
to 0 (all neighbors retained); by default, item-item models now retain all neighbors with nonnegative similarities. -
Default change: Changed the default value for
ModelSize
to 20 (was 30). -
Refactored the item-item recommender to get rid of
ItemItemModelBackedScorer
, simplifying the class hierarchy and configuration. -
Replaced
LongScoredList
with a list ofScoredId
objects in Item-Item model construction to support side channels (#issue(219)).
Funk-SVD
-
Incompatible change: moved iterative support code to
o.g.l.iterative
and changed parameters. TheStoppingCondition
interface and implementations now live in this package; common iterative method parameters are now defined by annotations ino.g.l.iterative
.-
IterationCount
is moved to the new package. -
MinimumIterations
is moved to the new package. -
Threshold stopping conditions now use
StoppingThreshold
in this package instead ofThresholdValue
. If you configure the threshold value, update your configuration accordingly. -
The FunkSVD
LearningRate
andRegularizationTerm
have been moved to the new iterative parameters package. -
Config change: Changed the default value for
MinimumIterations
to 10.
-
-
Added several new configuration points to the Funk-SVD model builder
Evaluator
-
TrainTestEvalCommand
now returnsTable
, notTableImpl
. -
Eval configuration changes
-
Force and thread count are now runtime parameters, not script parameters. Specify them with
--force
and--thread-count
command line options, or the corresponding eval mojo options. -
Commands receive the eval configuration via the
setConfig
method.
-
-
Added a
trainModel
command that trains a model and applies arbitrary functions to it. -
Table changes:
-
Tables now live in
o.g.l.util.table
. -
TableImpl
is now package-private and immutable; useTableBuilder
to build a table. -
InMemoryWriter
is replaced withTableBuilder
, which implementsTableWriter
. -
Table layouts now live directly in the table package.
-
Table writers now live in
o.g.l.util.table.writer
.
-
-
Many improvements to the
dumpGraph
command (#issue(264)). -
AbstractCommand
now allows for the name to be null, although null names can never be exposed to callers. -
Added
run-r
goal to the Maven plugin to run R. -
Added the
lenskit-publish
phase to the LensKit evaluation lifecycle as a place to hook in and generate reports that use the output oflenskit-analyze
. -
Added the
subsample
command to subsample a data set.
Train-Test Evaluator
-
Train-test evaluator always runs, even if output is up-to-date with respect to input; use the
lenskit.eval.skip
Maven property to disable the evaluator when running it via Maven and you only want to run post-eval analysis phases. -
Train-test evaluator now has
predictionChannel
directive to write side channel values out to the prediction output file. -
Added
retain
directive to thetrainTest
command to retain a fixed number of items per user. -
Deprecated the
holdout
directive ontrainTest
that takes a fraction in favor of the clearerholdoutFraction
directive. -
Add the ability for
metric
to take an arbitrary function to compute metrics over an algorithm, andmultiMetric
to compute multiple metrics per algorithm. -
Added the
externalAlgorithm
directive to allow algorithms implemented in external processes to be evaluated.
Archetypes
-
Added lenskit-archetype-fancy-analysis archetype to provide a template for more sophisticated LensKit experimental setups.
-
Improved the simple archetype to use the new R mojo.