我正在使用带有列 = ['users_id', 'item_id', 'rating', 'timestamp', 'title'] 的 DataFrame 的 python 3.5,我正在使用
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
我应该如何处理?
最佳答案
如果你想在你的 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 中找到更多信息,例如,您可以看到有关 Building Datasets 的部分或 Quickstart .
关于python - 如何从特定格式的 DataFrame 创建稀疏矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51144061/