как создать разреженную матрицу из DataFrame в определенном формате - PullRequest
0 голосов
/ 03 июля 2018

Я работаю с Python 3.5 с DataFrame со столбцами = ['users_id', 'item_id', 'rating', 'timestamp', 'title'], и я использую model = LightFM(loss='warp') для рекомендательной модели

так что для обучения мне нужен sparseMatrix в определенном формате => (users_id, item_id) рейтинг

нравится это

но мне никогда не удавалось использовать это scipy.sparse.csr_matrix(data['users_id']) Это дает мне что-то вроде этого:

(0,0) 5

(0,1) 5

(0,2) 4

(0,3) 5

Как мне поступить?

1 Ответ

0 голосов
/ 12 июля 2018

Если вы хотите создать разреженную матрицу после ее использования в вашей модели 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 с внутренним идентификатором, а метод 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 , например, в разделе о Наборы данных здания или Быстрый старт .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...