LensKit 开源推荐引擎使用教程

举报
洛阳泰山 发表于 2023/03/14 18:08:45 2023/03/14
【摘要】 LensKit是一个开源的推荐系统工具包,它提供了一组算法和工具来构建和评估推荐系统。LensKit支持基于物品的协同过滤、基于用户的协同过滤、基于模型的推荐和混合推荐等多种推荐算法。


简介

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

LensKit的主要特点是:

  1. 灵活性:LensKit支持多种推荐算法,用户可以根据自己的需求选择合适的算法。
  2. 易用性:LensKit提供了简单易用的API和命令行工具,用户可以方便地构建和评估推荐系统。
  3. 可扩展性:LensKit采用模块化的设计,用户可以自定义算法和评估指标。
  4. 高性能: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新增了一些基于模型的推荐算法,包括主题模型、隐式反馈模型和矩阵分解等。这些算法可以提高推荐系统的准确性和效率。
  2. 改进了基于物品的协同过滤算法:LensKit 3.0-M2对基于物品的协同过滤算法进行了优化,提高了推荐系统的准确性和效率。
  3. 改进了评估指标:LensKit 3.0-M2新增了一些评估指标,包括覆盖率、多样性和新颖性等,可以更全面地评估推荐系统的性能。
  4. 改进了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。包含本文教程的中完整代码。感兴趣的小伙伴,欢迎查看,如果觉得不错,记得给个星星啊!


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。