Python вызывает ошибку AttributeError при вызове методов объекта sklearn Pipeline

Проблема

Я вызываю методы fit_transform() и transform() для объекта Pipeline, но Python выдает ошибку AttributeError всякий раз, когда я пытаюсь это сделать. Вот что я пытаюсь запустить с импортом. (Примечание: разделение поездов и тестов уже выполнено)

from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression
from sklearn.pipeline import Pipeline

pipe = Pipeline([('mean_impute', SimpleImputer()), 
                 ('norm',        StandardScaler()), 
                 ('sklearn_lm',  LinearRegression())])

pipe.fit_transform(x_train, y_train)  #<-- error here

x_transform = pipe.transform(x_test)  #<-- and here if previous line is absent

Текст ошибки следующий:

AttributeError: This 'Pipeline' has no attribute 'fit_transform'

Что пошло не так? Я уверен, что это что-то простое.

Вещи, которые я пробовал:

  • Просмотрел документацию для научного комплекта, узнайте, что эти методы существуют для объекта Pipeline в sklearn
  • Проверили размеры x_train и y_train, чтобы убедиться, что они одинаковы и что у них обоих есть заголовки.
  • Переустановил sci-kit learn

Какую версию склеарна вы используете?

John Gordon 16.03.2024 00:18

@Джон - у меня версия 1.3.0

Martin 16.03.2024 00:23
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
251
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

На этом веб-сайте говорится, что этот метод действителен только в том случае, если окончательная оценка либо реализует fit_transform, либо подходит и преобразуется. Я не знаю, что такое окончательная оценка, но это может быть вашей проблемой (я знаю, что это не очень помогло, но я попробовал).

Ответ принят как подходящий

В документации для sklearn.pipeline.Pipeline.fit_transform указано, что он «[o]действителен только в том случае, если окончательный оценщик реализует либо fit_transform, либо fit и transform». Формулировка может быть немного двусмысленной, но она означает две возможности: (i) окончательная оценка реализует fit_transform или (ii) окончательная оценка реализует fit и transform.

Ваша окончательная оценка — sklearn.linear_model.LinearRegrade, которая реализует fit, но не transform. Вот почему возникает ошибка.

Другие вопросы по теме