Я создаю рекомендательную систему - гибрид в Lightfm. В моих данных 39326 уникальных пользователей и 2569 уникальных игр(предметов). Моя разреженная матрица взаимодействия поездов имеет форму: <39326x2569 разреженная матрица типа '<class 'numpy.float64'>' с 758931 сохраненным элементом в формате Compressed Sparse Row> Разреженная матрица моего тестового взаимодействия имеет форму: <39323x2569 разреженная матрица типа '<class 'numpy.float64'>' с 194622 сохраненными элементами в формате Compressed Sparse Row>
Я тренирую модель: model1 = LightFM (learning_rate = 0,01, loss = 'warp')
model1.fit(train_interactions,
эпох=20)
который создает объект: <lightfm.lightfm.LightFM по адресу 0x1bf8c8dc4c8>
Но когда я пытаюсь проверить точность:
train_precision = precision_at_k(model1, train_interactions, k=10).mean()
test_precision = точность_at_k (модель1, test_interactions, k = 10). среднее ()
Я получаю сообщение об ошибке: Неверное количество функций в user_features ПОЧЕМУ??? Ясно, что формы совместимы? Что мне не хватает?
Ваша тестовая разреженная матрица имеет размер 39323x2569, а ваша разреженная матрица поезда имеет размер 39326x2569. В тестовом наборе отсутствуют 3 пользователя.
Я предлагаю вам использовать встроенную функцию разделения обучения/тестирования lightfm, чтобы избежать ошибок: https://making.lyst.com/lightfm/docs/cross_validation.html
Если вы хотите разделить свои данные по-своему, вы также можете преобразовать свои user_id и item_id в последовательные целые числа, начиная с 0. А затем используйте это:
from lightfm.data import Dataset
# Create your train and test set in the format [[user_id1, item_id1, score1], ..., [user_idn, item_idn, scoren]]
# Your score can be just 1 for an implicit interaction
# user_id and item_id are integers
data = Dataset()
data.fit(unique_user_ids, # list from 0 to n_users
unique_item_ids # list from 0 to n_items
)
train, weights_matrix = data.build_interactions([tuple(i) for i in train])
test, weights_matrix = data.build_interactions([tuple(i) for i in test])
Большое спасибо! Мне пришлось использовать свой собственный выбор, чтобы убедиться, что каждый пользователь и каждый элемент проходят тест на поезд. Итак, теперь формы совместимы, и это работает, если я не использую какие-либо пользовательские/предметные fetaures, но когда я это делаю, я все еще получаю сообщение об ошибке. Я добавил 8 дополнительных функций, поэтому мои формы: взаимодействия: 39326x2569, форма пользовательских функций: 39326 строк × 2577 (2577 = 2569 +8), характеристики элементов: 2569 строк × 39334 столбца (39334 = 39326 + 8). Он отлично тренируется, но при попытке оценить его я все еще получаю сообщение об ошибке формы. Какой формы должны быть черты?