Базовая фильтрация данных на основе пользователя и элемента в Python SciKit - PullRequest
0 голосов
/ 10 октября 2018

Я пытаюсь внедрить систему рекомендаций для пользователей на основе их рейтинга.Я думаю, что самый распространенный.Я много читал и попал в короткий список Surprise, системы рекомендаций, основанной на Python-Scikit.

Хотя я могу импортировать данные и выполнять прогнозирование, это не совсем то, что мне хотелось бы.

Прямо сейчас, что у меня есть: Я могу передать user_id, item_id и rating и получить вероятность того, что этот пользователь даст оценку, которую я прошел.

Что я действительно хочу сделать: Передать user_id и взамен получить список элементов, которые потенциально могут понравиться / высоко оценены этим пользователем на основе данных.

from surprise import Reader, Dataset    
from surprise import SVD, evaluate

# Define the format
reader = Reader(line_format='user item rating timestamp', sep='\t')
# Load the data from the file using the reader format
data = Dataset.load_from_file('./data/ecomm/e.data', reader=reader)    

# Split data into 5 folds
data.split(n_folds=5)

algo = SVD()

# Retrieve the trainset.
trainset = data.build_full_trainset()
algo.fit(trainset)

//Inputs are: user_id, item_id & rating.
print algo.predict(3, 107, 1)

Примеры строк из файла данных.

Первый столбец - user_id, 2nd - идентификатор элемента, третий - рейтинг, а затем отметка времени.

196 242 3   881250949
186 302 3   891717742
22  377 1   878887116
244 51  2   880606923
166 346 1   886397596
298 474 4   884182806
115 265 2   881171488
253 465 5   891628467
305 451 3   886324817
6   86  3   883603013

1 Ответ

0 голосов
/ 10 октября 2018

Вам нужно перебрать все возможные значения item_id для одного user_id и прогнозировать его рейтинг.Затем вы собираете предметы с самым высоким рейтингом, чтобы рекомендовать этому пользователю.

Но убедитесь, что пары user_id, item_id нет в наборе обучающих данных.Что-то вроде здесь этой функции :

build_anti_testset

Возвращает список оценок, которые можно использовать в качестве тестового набора в тесте () метод.

Рейтинги - это все оценки, которых нет в наборе поездов, то есть все оценки rui, в которых известен пользователь u, пункт i известен, но оценки rui нет в наборе поездов.Поскольку rui неизвестен, он либо заменяется значением заполнения, либо предполагается, что он равен среднему значению всех рейтингов global_mean.

После этого вы можете передать эти пары в test() или * 1022.* метод и собирать рейтинги, и получить лучшие N рекомендаций из этих данных для конкретного пользователя.

Пример этого приведен здесь:

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