LensKit 开源推荐引擎使用教程

Posted 洛阳泰山

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LensKit 开源推荐引擎使用教程相关的知识,希望对你有一定的参考价值。

简介

LensKit是一个开源的推荐系统工具包,它提供了一组算法和工具来构建和评估推荐系统。LensKit支持基于物品的协同过滤、基于用户的协同过滤、基于模型的推荐和混合推荐等多种推荐算法。

LensKit的主要特点是:

  1. 灵活性:LensKit支持多种推荐算法,用户可以根据自己的需求选择合适的算法。

  1. 易用性:LensKit提供了简单易用的API和命令行工具,用户可以方便地构建和评估推荐系统。

  1. 可扩展性:LensKit采用模块化的设计,用户可以自定义算法和评估指标。

  1. 高性能:LensKit采用并行计算和内存映射等技术,能够高效地处理大规模数据集。

LensKit已经被广泛应用于学术界和工业界,例如在Netflix Prize竞赛中就有参赛选手使用了LensKit构建推荐系统。

官网地址: https://lenskit.org/

目前 LensKit已经弃用java代码,改为python实现。想看java教程的清查看https://java.lenskit.org/

文档网址:https://mooc.lenskit.org/

GroupLens网址 :组镜头 (grouplens.org)

开始

从Maven中央存储库获取LensKit。

<dependency>
  <groupId>org.grouplens.lenskit</groupId>
  <artifactId>lenskit-all</artifactId>
  <version>3.0-M2</version>
</dependency>

LensKit 3.0-M2LensKit的一个版本,它是LensKit 3.0版本的第二个里程碑版本。以下是一些LensKit 3.0-M2的新特性和改进:

  1. 改进了基于模型的推荐算法:LensKit 3.0-M2新增了一些基于模型的推荐算法,包括主题模型、隐式反馈模型和矩阵分解等。这些算法可以提高推荐系统的准确性和效率。

  1. 改进了基于物品的协同过滤算法:LensKit 3.0-M2对基于物品的协同过滤算法进行了优化,提高了推荐系统的准确性和效率。

  1. 改进了评估指标:LensKit 3.0-M2新增了一些评估指标,包括覆盖率、多样性和新颖性等,可以更全面地评估推荐系统的性能。

  1. 改进了API和文档:LensKit 3.0-M2改进了API和文档,使得用户可以更方便地使用LensKit构建和评估推荐系统。

配置推荐器

方式一:

为了使用LensKit,您首先需要配置要使用的LensKit算法。这主要包括选择所需的组建实现并使用

LenskitConfiguration配置它们。例如,要使用基线配置基本项目-项目 kNN 推荐器,请使用以下配置(将其保存在文件中,例如item-item.groovy)

// Use item-item CF to score items
bind ItemScorer to ItemItemScorer
// let's use personalized mean rating as the baseline/fallback predictor.
// 2-step process:
// First, use the user-item bias to compute item scores
bind (BaselineScorer, ItemScorer) to BiasItemScorer
// Second, use user-item biases
bind BiasModel to LiveUserItemBiasModel
// and normalize ratings by baseline prior to computing similarities
bind (UserVectorNormalizer) to BiasUserVectorNormalizer
// little speed tweek
within (UserVectorNormalizer) 
    bind Biasmodel to UserItemBiasModel

然后,您可以在 Java 程序中加载该配置:

LenskitConfiguration config = ConfigHelpers.load(new File("item-item.groovy"))

方式二:

使用java代码配置LenskitConfiguration,代码如下

// 配置Lenskit
LenskitConfiguration config = new LenskitConfiguration();
config.bind(ItemScorer.class).to(ItemItemScorer.class);
config.set(MinNeighbors.class).to(2);
config.set(ModelSize.class).to(1000);
config.bind(BaselineScorer.class,ItemScorer.class).to(UserMeanItemScorer.class);
config.bind(UserMeanBaseline.class,ItemScorer.class).to(ItemMeanRatingItemScorer.class);
config.bind(UserVectorNormalizer.class).to(BaselineSubtractingUserVectorNormalizer.class);

个人建议,尽量使用方式一,可以更好的讲算法配置和项目分离,使得项目更加灵活。

连接数据源

LensKit还需要数据源。我们可以使用其中一个MovieLens数据集。从那里下载最新-小(或最新)文件。您还需要一个数据清单来告诉 LensKit 如何使用它;下载这个并将其保存在MovieLens数据目录下.csv文件里。

然后,您可以加载数据源:

StaticDataSource source = StaticDataSource.load("ml-latest-small/movielens.yml");
DataAccessObject dao = data.get();

创建推荐器

然后,您需要创建一个推荐器才能实际推荐:

LenskitRecommender rec = LenskitRecommender.build(config, dao);

当您完成一个LenskitRecommender时,请使用rec.close()进行关闭。使用try-with-resources块可以很好地实现这一点。

try (LenskitRecommender rec = LenskitRecommender.build(config)) 
    rec.close();
    /* do things */

生成建议

推荐器对象提供对组件的访问,例如可以执行实际建议。例如,要为用户 1 生成 10条建议:ItemRecommender

ItemRecommender irec = rec.getItemRecommender();
ResultList recs = irec.recommendWithDetails(1, 10, null, null);

由于我们在配置LensKit时没有配置ItemRecommender,因此它使用默认设置:TopNItemRecommender,该推荐器使用配置的ItemScorer对项目进行评分,并返回N个得分最高的项目。由于我们使用的是物品-物品协同过滤,因此这些分数是物品-物品协同过滤预测评分的原始值。

您还可以使用以下命令预测评级:RatingPredictor

RatingPredictor pred = rec.getRatingPredictor();
Result score = pred.predict(1, 17);

输出为,用户1 对商品17的预测评分结果。

开源代码

https://gitee.com/taisan/recommend_system/tree/lenskit/

这里是我基于LensKit 写的一些算法实现demo。包含本文教程的中完整代码。感兴趣的小伙伴,欢迎查看,如果觉得不错,记得给个星星啊!

以上是关于LensKit 开源推荐引擎使用教程的主要内容,如果未能解决你的问题,请参考以下文章

强烈推荐!Github 顶级 Java 教程类开源项目推荐!

8个基于Lucene的开源搜索引擎(推荐)

开源推荐 243分钟入门Apache Phoenix(HBase的开源SQL引擎)

Java开发教程!Redis-生产架构选型解决方案持续更新中

我的渲染技术进阶之旅推荐一个游戏引擎开发的开源电子书《游戏引擎 浅入浅出》

我的渲染技术进阶之旅推荐一个游戏引擎开发的开源电子书《游戏引擎 浅入浅出》