如何从 DataFrame 以特定格式创建稀疏矩阵

Wae*_*ssi 4 python sparse-matrix dataframe

我正在使用带有列 = ['users_id', 'item_id', 'rating', 'timestamp', 'title'] 的 DataFrame 使用 python 3.5,我正在使用 model = LightFM(loss='warp') 推荐模型

所以对于训练,我需要一个特定格式的 sparseMatrix => (users_id, item_id) rating

像这样

但是当我使用它时我从未成功scipy.sparse.csr_matrix(data['users_id'])。它给了我这样的东西:

(0,0) 5

(0,1) 5

(0,2) 4

(0,3) 5

我应该如何处理?

Vin*_*Dld 6

如果您想在 LightFM 模型中使用它后创建一个稀疏矩阵,我认为您应该使用库提供的Dataset对象。例如,如果我调用您的 DataFrame df :

from lightfm.data import Dataset

data = Dataset()
data.fit(df.users_id.unique(), df.item_id.unique())
interactions_matrix, weights_matrix = data.build_interactions([tuple(i) for i in df.drop(['timestamp', 'title'], axis = 1).values])
Run Code Online (Sandbox Code Playgroud)

fit 方法用于将您的 users_id 和 items_id 映射到内部 id 并且 build_interactions 方法创建两个稀疏矩阵,一个二进制矩阵仅包含用户和项目之间的交互,另一个二进制矩阵具有权重(即评级),它需要一个可迭代的(user_id, item_id) 或 (user_id, item_id, weight) 作为参数。

然后,您可以使用这两个通过 build_interactions 创建的矩阵在 LightFM 中拟合您的模型。

from lightfm import LightFM

model = LightFM(loss='warp')
model.fit(interactions_matrix, sample_weight = weights_matrix)
Run Code Online (Sandbox Code Playgroud)

您可以在 LightFM文档中找到更多信息,例如可以查看有关构建数据集快速入门的部分