Пустые результаты из неявной библиотеки Python для рекомендаций - PullRequest
1 голос
/ 23 мая 2019

Я использую неявную библиотеку python (https://github.com/benfred/implicit) в надежде сгенерировать некоторые рекомендации по продукту для моей базы пользователей. У меня есть данные 13 000 просмотров продуктов из моей базы пользователей. Я извлек эти данные в csvэто выглядит следующим образом:

user_id, 1, 2, 3
1, 0, 1, 0
2, 1, 1, 0
3, 0, 0, 1

Мой CSV выше имеет product_id по верху и user_ids слева для первого столбца в строке. 1 или 0 для каждого пользователя отражают, если пользователь имеетпросматривал этот product_id. Ниже приведен код, который я до сих пор пытался сгенерировать:

import implicit
import pandas as pd
import scipy.sparse as sparse

data = pd.read_csv('data/interactions_matrix.csv')
interactions = sparse.csr_matrix(data.to_sparse().to_coo())

# initialize a model
model = implicit.als.AlternatingLeastSquares()

# train the model on a sparse matrix of item/user/confidence weights
model.fit(interactions)

user_ids = [1,2,3]

# recommend items for a user
for user_id in user_ids:
    print(user_id)
    print(model.recommend(user_id, interactions))

К сожалению, когда я запускаю результаты, я просто получаю кучу пустых массивов, что заставляет меня думать, что я делаючто-то явно не так. Я предполагаю, что это формат данных, которые я импортирую, но мне трудно найти информацию о форматах данных примеров для чтения в библиотеку. Любая помощь приветствуется!

1 Ответ

1 голос
/ 25 мая 2019

При такой загрузке данных в вашей матрице взаимодействий по-прежнему есть запись для каждого элемента / пары пользователей - что для этой библиотеки означает, что каждому пользователю понравился каждый элемент.Вызов по умолчанию по умолчанию удаляет уже понравившиеся элементы (с параметром filter_already_liked_items), в результате чего результаты становятся пустыми массивами, как вы видели, но это также означает, что обученная модель также не будет хорошей.

Вы должны вызвать interactions.eliminate_zeros(), чтобы удалить нулевые записи перед установкой модели.Кроме того, вместо того, чтобы иметь плотную матрицу в формате CSV и конвертировать в coo, вероятно, проще просто перечислить тройки itemid / userid / value

...