Метод np.hstack() "играет" с размерностью фреймов по строкам - вместо 88 строк на выходе 84
"Допиливаю" задание - предсказать оценку (рейтинг) пользователя в датасете Movielens: для этого пытаюсь построить модель, обучив ее методом линейной регрессии. Применяется метод TFIDF на тегах и жанрах (тем и другим придаются различные веса).
Проблема в том, что формирование фрейма для регрессии приводит к образованию двух столбцов с множественными значениями (ячейка 77, колонки 81 и 83). Это мешает провести обучение. Ссылка: https://github.com/Alex-zlat/Kazantcev_DS-25/blob/master/MACHINE_LEARNING/14_Recommendations_based_on_the_content/14_Recommendations_content.ipynb
Логика:
- для двух колонок (жанры и теги) по отдельности применили TfidfTransform: получили 2 матрицы - tfidf для жанров и tfidf для тегов; у них одинаковое количество строчек - по количеству фильмов - и разное количество колонок
- дальше их соединили в одну большую матрицу. Сюда же добавили id фильма и id пользователя. Здесь проблема, описанная выше.
- дальше выберем пользователя, получим список id фильмов, которые он оценил. Его оценки мы сможем предсказывать, построив модель.
Возможно, ошибка закралась вследствие стека, который "скрадывает" 4 столбца (фактически, видимо, он их сливает в 81-й и 83-й столбики):
tags_movie_groupby из 69-й ячейки дает размерность 1572 rows × 8 columns.
Мы стекаем эти колонки с полученными обучением колонками tfidf, у которых та же размерность по строкам, а колонок 80 - (1572, 80):
hs = np.hstack( (X_train_gen_2, X_train_tfidf_tags_2) )
Вот непонятно: после того, как стекнули оба фрейма и Series, размерность стала не 88 столбиков, а 84:
shared_stack = np.hstack( (hs, movieId_as_series, userId_as_matrix) )
shared_stack.shape
# (1572, 84)
Не эта ли аномалия является причиной некорректного фрейма?