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

4
我正在使用Python 3.5和一个DataFrame,其中列为['users_id', 'item_id', 'rating', 'timestamp', 'title'],并且我正在使用model = LightFM(loss='warp')来进行推荐模型。
因此,在训练期间,我需要以特定格式的稀疏矩阵作为输入=> (users_id, item_id) rating,就像这样:(点击查看)
但是,当我使用scipy.sparse.csr_matrix(data['users_id'])时,我从未成功过。它会给我类似于以下内容:
(0,0) 5
(0,1) 5
(0,2) 4
(0,3) 5
我该如何处理?
1个回答

7
如果您想创建一个稀疏矩阵,并在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方法用于将用户ID和物品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 文档中查找更多信息,例如可以查看构建数据集快速入门部分。

非常有帮助!我认为你应该展示df。这样可以看到在进行删除操作时,确切地保留了哪些变量。谢谢! - Mez13

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接