来自隐式python库的空白结果以供参考

时间:2019-05-23 17:50:59

标签: python machine-learning recommendation-engine

我正在使用python隐式库(https://github.com/benfred/implicit),希望为我的用户群生成一些产品推荐。我的用户群中有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反映了该用户是否已查看该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))

不幸的是,当我运行结果时,我得到的只是一堆空白数组,这让我觉得我做的事情显然是错误的。我在猜测我要导入的数据的格式,但是我很难找到有关示例数据格式的信息以读取到库中。任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:1)

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

在拟合模型之前,应致电interactions.eliminate_zeros()删除零条目。此外,与其以CSV格式生成密集矩阵并转换为Coo,不如列出itemid / userid / value的三元组可能更容易