В 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 массива:
- movieId и userId
- вектор тегов
- вектор жанров.
Прежде данные векторы пытаюсь из разряженных массивов преобразовать в обычные колонки библиотеки 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 шт):
Скорее всего у вас на выходе трансформера получается разреженная матрица, у неё нет метода to_numpy. И вообще хорошо бы с такими матрицами работать отдельно, иначе вам может не хватить памяти. Например, выделить главные компоненты с помощью TruncatedSVD (аналог PCA для разреженных матриц) и соединять с остальными данными эти компоненты, а не всю матрицу.
Но если очень хотите, можете превратить матрицу в обычную с помощью метода todense, но будьте готовы к тому, что у вас может резко кончиться память. Или что ML модели будут очень тяжело переваривать такие объёмы данных (много колонок). Хотя если у вас не очень много тэгов и жанров то я, возможно, зря вас пугаю проблемами.