python - 用于建议的隐式 Python 库的空白结果

标签 python machine-learning recommendation-engine

我正在使用 Python 隐式库 ( https://github.com/benfred/implicit ),希望为我的用户群生成一些产品推荐。我有来 self 的用户群的 13,000 次产品浏览数据。我已将此数据提取到如下所示的 csv 中:

user_id, 1, 2, 3
1, 0, 1, 0
2, 1, 1, 0
3, 0, 0, 1

我上面的 csv 的行中第一列的顶部有 Product_id,左侧有 user_id。每个用户的 1 或 0 反射(reflect)该用户是否查看过该 Product_id。下面是我迄今为止尝试生成推荐的代码:

import implicit
import pandas as pd
import scipy.sparse as sparse

data = pd.read_csv('data/interactions_matrix.csv')
interactions = sparse.csr_matrix(data.to_sparse().to_coo())

# initialize a model
model = implicit.als.AlternatingLeastSquares()

# train the model on a sparse matrix of item/user/confidence weights
model.fit(interactions)

user_ids = [1,2,3]

# recommend items for a user
for user_id in user_ids:
    print(user_id)
    print(model.recommend(user_id, interactions))

不幸的是,当我运行结果时,我只是得到一堆空白数组,这让我觉得我做了一些明显错误的事情。我猜这是我正在导入的数据的格式,但我很难找到有关示例数据格式的信息以读入库。

最佳答案

当加载这样的数据时,您的交互矩阵仍然有每个项目/用户对的条目 - 对于这个库来说,这表明每个用户都喜欢每个项目。默认情况下,推荐调用会删除已喜欢的项目(使用 filter_already_liked_items 参数),导致结果像您所看到的那样为空数组 - 但这也意味着您训练的模型也不会很好。

您应该在拟合模型之前调用 interactions.eliminate_zeros() 删除零条目。另外,与其使用 CSV 格式的密集矩阵并转换为 coo,不如列出 itemid/userid/value 的三元组可能更容易

关于python - 用于建议的隐式 Python 库的空白结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56280552/

相关文章:

python - 在python中将字符串转换为WAV文件

android - Python 和 Android 应用程序

algorithm - 用于聚类产品描述的 ML 方法

machine-learning - 可以使用经过普遍训练的深度学习分类器在子类中进行分类吗?

apache-spark - Spark MLlib : Difference between implicitTrain and explicitTrain

python - 如何在 PySpark 中构建稀疏矩阵?

python - 如何在 python 中一次迭代 2 行,并在 python 中的第二行中追加一个包含值的列?

python - 在确定具有第一优先级的列表后,通过选择具有最小值的列表来过滤嵌套列表?

c# - 如何为 Accord.NET DecisionTrees 正确提供输入数据

algorithm - 推荐人 : Log user actions & datamine it – good solution