Sklearn Label Encoder Обратное преобразование с неожиданными прогнозами
У меня есть набор данных, который я использую Label Encoder для классификации моих данных (из строк в числа).
Затем я использую библиотеку Surprise для обучения модели системы рекомендаций.
Я получаю прогнозы, используя следующий код:
# A reader is still needed but only the rating_scale param is requiered.
reader = Reader(rating_scale=(1, 100))
# The columns must correspond to user id, item id and ratings (in that order).
data = Dataset.load_from_df(df_categorized, reader)
# First train an SVD algorithm on the dataset.
trainset = data.build_full_trainset()
algo = SVD()
algo.fit(trainset)
# Than predict ratings for all pairs (u, i) that are NOT in the training set.
testset = trainset.build_anti_testset()
predictions = algo.test(testset)
top_n = get_top_n(predictions, n=5)
Я использовал метод top_n, который получает рекомендации top_n следующим образом:
def get_top_n(predictions, n=5):
'''Return the top-N recommendation for each user from a set of predictions.
Args:
predictions(list of Prediction objects): The list of predictions, as
returned by the test method of an algorithm.
n(int): The number of recommendation to output for each user. Default
is 10.
Returns:
A dict where keys are user (raw) ids and values are lists of tuples:
[(raw item id, rating estimation), ...] of size n.
'''
# First map the predictions to each user.
top_n = defaultdict(list)
for uid, iid, true_r, est, _ in predictions:
top_n[uid].append((iid, est))
# Then sort the predictions for each user and retrieve the k highest ones.
for uid, user_ratings in top_n.items():
user_ratings.sort(key=lambda x: x[1], reverse=True)
top_n[uid] = user_ratings[:n]
return top_n
Поскольку данные сначала были классифицированы с использованием Label Encoder, top_n ссылается на userId как кодированные значения, а рекомендованный контент - как на кодированные значения.
Как мне преобразовать данные обратно в некодированные значения?
Я попытался получить ключи, возвращаемые из top_n (кодированный userId), и использовать метод обратного преобразования кодировщиков меток, однако, поскольку он находится в dict, у него нет индексации, необходимой для работы метода. То же самое касается рекомендуемого содержимого, которое хранится в качестве значений в dict.