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

how to create a sparsematrix from DataFrame in a specific format

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

所以为了训练我需要一个特定格式的稀疏矩阵 => (users_id, item_id) 评级

like this

但是我用这个scipy.sparse.csr_matrix(data['users_id'])时从来没有成功过。它给了我这样的东西:

(0,0) 5

(0,1) 5

(0,2) 4

(0,3) 5

我应该如何处理?

如果你想在你的 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])

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)

您可以在 LightFM documentation, you can see for example the section about Building Datasets or the Quickstart 中找到更多信息。