В Python cтолбец tfidf не принимает метод to_numpy()

Работаю с датаестом MovieLens: по столбцу TFIDF на тегах и жанрах предсказываю оценку, которую пользователь поставит фильму. Каждая картина у меня описывается двумя векторами - тегов и жанров:

  • создал векторный класс count_vect = CountVectorizer() и обучил модель X_genres = count_vect.fit_transform(genres_tags['Movie_genres']), также и для тегов;

  • тем и другим придал разные веса (создал объект tfidf_transformer = TfidfTransformer() и обучил модель X_tfidf_gen = tfidf_transformer.fit_transform(X_genres), также для тегов)

Далее намереваюсь методом np.hstack соединить 3 массива:

  1. movieId и userId
  2. вектор тегов
  3. вектор жанров.

Прежде данные векторы пытаюсь из разряженных массивов преобразовать в обычные колонки библиотеки Numpy - получаю ошибку: to_numpy not found. В чем причина?

# объединим 2 массива колонок в одну матрицу (затем добавим третий)
X_gen_2 = X_tfidf_gen.to_numpy()           # здесь ошибка
X_tags_2 = X_tfidf_tags.to_numpy()         # здесь ошибка
hs = np.hstack( (X_gen_2, X_tags_2) )

Ответы (1 шт):

Автор решения: CrazyElf

Скорее всего у вас на выходе трансформера получается разреженная матрица, у неё нет метода to_numpy. И вообще хорошо бы с такими матрицами работать отдельно, иначе вам может не хватить памяти. Например, выделить главные компоненты с помощью TruncatedSVD (аналог PCA для разреженных матриц) и соединять с остальными данными эти компоненты, а не всю матрицу. Но если очень хотите, можете превратить матрицу в обычную с помощью метода todense, но будьте готовы к тому, что у вас может резко кончиться память. Или что ML модели будут очень тяжело переваривать такие объёмы данных (много колонок). Хотя если у вас не очень много тэгов и жанров то я, возможно, зря вас пугаю проблемами.

→ Ссылка