问题标签 [lightfm]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
210 浏览

python - lightfm 错误:并非所有估计的参数都是有限的,您的模型可能已经发散

我正在运行这个非常简单的代码:

使用以下输出:

我所有的 Scipy 稀疏矩阵都被归一化(即值是01)。

我试图改变学习计划和学习率,但没有结果。

我已经检查过,仅当我将项目特征添加到方程式时才会发生这种情况。仅使用交互或交互 + 用户功能运行 lightfm 时没有错误。

AFAIK,我已经安装了最新版本:

任何的想法?谢谢!

更新 1

我想知道我的稀疏矩阵是否太稀疏了......不过,我尝试过非常少的形状,并且出现了同样的错误:

确实,我做错了什么...

更新 2

我想我发现了问题......我做了以下实验:

即我像往常一样有例外。现在,如果你观察交互矩阵,它有一个关于用户和项目的交互,在用户和项目特征矩阵中,它们的所有特征分别设置为 0。所以,让我们在用户特征矩阵中改变它,例如:

瞧!

我们可以对项目特征矩阵做同样的事情:

因此,我将尝试找到一种过滤与全零用户和项目功能相关的交互的方法,然后我会发布它;)

0 投票
1 回答
802 浏览

python-3.x - LightFM 中的损失函数

我最近在学习训练推荐系统时遇到了 LightFM。到目前为止,我所知道的是它利用了逻辑、BPR、WARP 和 k-OS WARP 的损失函数。我没有仔细研究所有这些函数背后的数学。现在我很困惑的是,我怎么知道在哪里使用哪个损失函数?

0 投票
1 回答
260 浏览

machine-learning - 标准协同过滤与混合光 FM

我是推荐系统的新手,并试图了解标准协同过滤 (CF) 和 LightFM 等混合方法之间的根本区别。正如我在网上研究的那样,大多数提到混合方法的帖子都结合了 CF 和基于内容的方法。但从矩阵/数学的角度来看,LightFM 也学习了项目-用户交互嵌入,如 CF。它们有何不同?

非常感谢你。

0 投票
1 回答
1496 浏览

python - LightFM train_interactions 在训练集和测试集之间共享:这将导致评估不正确,请检查您的数据拆分

tl;dr:与 Yelp 数据集一起制作推荐系统,但遇到测试交互矩阵和训练交互矩阵共享 68 个交互。这将导致不正确的评估,请检查您的数据拆分。运行以下 LightFM 代码时出错。


全文:使用 Yelp 数据集构建推荐系统。

取消示例文档 ( https://making.lyst.com/lightfm/docs/examples/hybrid_crossvalidated.html ) 中提供的代码,用于混合协作过滤。

我按以下方式运行我的代码:

我有两个问题:

1) 运行有问题的行未注释 (train_interactions=train) 最初产生不一致的形状

通过以下方法解决:“测试”数据集由以下代码块修改,在其下方附加一个零块,直到尺寸与我的火车数据集的尺寸匹配(根据此建议:https ://github.com /lyst/lightfm/issues/369):

2)形状问题解决后,我尝试实现“train_interactions=train”

但遇到测试交互矩阵和训练交互矩阵共享 68 个交互。这将导致不正确的评估,请检查您的数据拆分。

而且我不确定如何解决第二个问题。有什么想法吗?

详细信息:
-“sparse_features_matrix”是 {items x categories} 的稀疏矩阵,其中如果一个项目是“Italian”和“Pizza”,那么“Italian”和“Pizza”的类别对于该项目的行将具有值“1” ...“0”别处。
-“sparse_Rating_Matrix”是{users x items}的稀疏矩阵,包含用户对餐厅(项目)的评分值。

2020 年 4 月 8日更新:
LightFM 有一个完整的 Database() 类对象,您应该使用它在模型评估之前准备数据集。我发现了一篇很棒的 github 帖子 ( https://github.com/lyst/lightfm/issues/494 ),其中用户 Med-ELOMARI 对一个小型测试数据集进行了惊人的演练。

当我通过这种方法准备数据时,我能够添加我想要建模的 user_features(例如:User_1592 喜欢“泰国”、“墨西哥”、“寿司”美食)。

根据 Turbo 的评论,我使用 LightFM 的 random_train_test_split 方法(最初是通过 sklearn 的 train_test_split 方法拆分我的数据)并使用新的训练/测试集和正确(据我所知)准备好的模型运行 auc_score 我仍然遇到同样的错误代码:

输入:

如果使用“train_interactions=train”,则输出:

然而,好消息是——通过从 sklearn 的 train_test_split 切换到 LightFM 的 random_train_test_split,我的模型的 AUC 分数在训练时从 0.49 变为 0.96。所以我想如果可以的话,坚持使用 LightFM 的方法很重要!

0 投票
1 回答
678 浏览

python - 如何对 LightFM 电影推荐系统的用户项目交互矩阵进行交叉验证?

我有一个来自用户电影评分的movielens数据集的交互矩阵(scipy.sparse.csr_matrix),并且我正在使用item_features构建一个LightFM模型。现在我将矩阵分为训练和测试,但是我该如何进行交叉验证呢?如何衡量效率?

0 投票
1 回答
538 浏览

python - 在 lightfm 中设置用户项目交互数据的正确方法

对于我在其他项目/产品上有其他隐式数据的情况,在向 lightfm 模型提供数据时设置数据的正确方法是什么。例如,我有100k 用户 x 200 项交互数据,但在实际应用中,我希望模型仅提供 200 项中的 50 项的推荐。那么如何设置数据呢?我正在考虑两种情况,但我不确定哪种方法是正确的:

案例 1:直接将整个矩阵(100k 个用户 x 200 个项目)作为interactions参数输入 lightfm。这种方式是更多的协作学习。

案例 2:仅将 (100k 个用户 x 50 个项目) 提供给interactions参数并将 (100k x 150 个项目) 矩阵用作user_features. 这种方式是更多基于内容的学习。

哪一个是正确的?此外,对于案例 1,模型评估(精度、召回率等)的效用函数是否可以仅针对选定项目进行推荐,例如,前 k 个推荐项目应仅从 50 个项目中获取,而不是推荐其他项目并从中计算精度、召回率等。

0 投票
0 回答
325 浏览

lightfm - 在 LightFM 中“衡量”项目/用户功能重要性的好方法是什么?

我一直在电子商务应用程序中使用 LightFM,并取得了相当大的成功。感谢这个非常酷的包裹!

我正在优化推荐输出。由于特定的业务领域考虑,某些特征“更重要”并且在可变性方面比其他特征具有更少的余地,例如“价格”(即某些推荐项目需要在软价格范围内)。

LightFM 是否还有一种方法可以比其他方法更重视此功能?

提前致谢!

0 投票
1 回答
433 浏览

python-3.x - Lightfm user_features 中的功能数量不正确

我正在构建推荐系统 - Lightfm 中的混合。我的数据有 39326 个独立用户和 2569 个独立游戏标题(项目)。我的火车交互空间矩阵的形状:<39326x2569 类型的稀疏矩阵 '<class 'numpy.float64'>' 包含 758931 个压缩稀疏行格式的存储元素> 我的测试交互空间矩阵的形状是:<39323x2569 类型的稀疏矩阵'<类 'numpy.float64'>' 以压缩稀疏行格式存储 194622 个元素>

我训练模型:model1 = LightFM(learning_rate=0.01, loss='warp') model1.fit(train_interactions, epochs
=20) 创建对象:<lightfm.lightfm.LightFM at 0x1bf8c8dc4c8> 但是当我尝试通过以下方式检查准确性时: train_precision = precision_at_k(model1, train_interactions, k=10).mean() test_precision = precision_at_k(model1, test_interactions, k=10).mean()

我收到错误消息:user_features 中的功能数量不正确 为什么???显然形状是兼容的?我错过了什么?

0 投票
0 回答
61 浏览

python - 获得模型可解释性的特征重要性/敏感性

我是推荐模型的新手,我正在将 LightFM 用于一个项目。我正在为客户喜欢/不喜欢的建议创建模型(不涉及评级)。在这种情况下,模型可解释性是否有任何选项?

我了解 LightFM 是一种混合方法(基于内容和协作),但有没有一种方法可以根据模型预测中的重要性对用户/项目特征进行排名。或者了解用户/项目特征对预测的影响。在常规 ML 模型中,我可以使用置换特征重要性来评估这一点,例如部分依赖图。

请让我知道是否有人进行了相关分析,或者在这种情况下是否无法提供模型可解释性。

0 投票
0 回答
214 浏览

recommendation-engine - LightFM Recommender 模型的用户/项目特征选择

我正在学习更多关于 Recommender 模型和 LightFM 的信息,我有一个问题。是否有关于如何为 LightFM 中使用的用户/项目特征执行特征选择的推荐方法/指南,还是完全基于反复试验?

在一对特征高度相关的情况下,通过使用相关性排除排名较低的变量来添加不同的特征是否有意义?让我知道您是否尝试过其他替代方法以及它们是否有帮助。

LightFM 文档: https ://making.lyst.com/lightfm/docs/home.html