Python – Что такое sklearn.pipeline.Pipeline?

Я не могу понять, как работает sklearn.pipeline.Pipeline .

В документе есть несколько объяснений. Например, что они означают:

Трубопровод трансформаций с окончательной оценкой.

Чтобы сделать мой вопрос более ясным, какие steps ? Как они работают?

редактировать

Благодаря ответам я могу уточнить мой вопрос:

Когда я вызываю конвейер и передаю, как шаги, два трансформатора и одну оценку, например:

 pipln = Pipeline([("trsfm1",transformer_1), ("trsfm2",transformer_2), ("estmtr",estimator)]) 

Что происходит, когда я это называю?

 pipln.fit() OR pipln.fit_transform() 

Я не могу понять, как оценщик может быть трансформатором и каким образом может быть установлен трансформатор.

2 Solutions collect form web for “Python – Что такое sklearn.pipeline.Pipeline?”

Трансформатор в scikit-learn – некоторый класс, который имеет метод fit и transform, или метод fit_transform.

Predictor – некоторый класс, который подходит и предсказывает методы, или метод fit_predict.

Трубопровод – это абстрактное понятие, это не какой-то существующий алгоритм ml. Часто в задачах ML вам нужно выполнить последовательность различных преобразований (найти набор функций, сгенерировать новые функции, выбрать только некоторые хорошие функции) исходного набора данных до применения окончательной оценки.

Вот хороший пример использования трубопровода. Pipeline дает вам один интерфейс для всех трех шагов преобразования и итоговой оценки. Он инкапсулирует трансформаторы и предикторы внутри, и теперь вы можете сделать что-то вроде:

  vect = CountVectorizer() tfidf = TfidfTransformer() clf = SGDClassifier() vX = vect.fit_transform(Xtrain) tfidfX = tfidf.fit_transform(vX) predicted = clf.fit_predict(tfidfX) # Now evaluate all steps on test set vX = vect.fit_transform(Xtest) tfidfX = tfidf.fit_transform(vX) predicted = clf.fit_predict(tfidfX) 

Сразу:

 pipeline = Pipeline([ ('vect', CountVectorizer()), ('tfidf', TfidfTransformer()), ('clf', SGDClassifier()), ]) predicted = pipeline.fit(Xtrain).predict(Xtrain) # Now evaluate all steps on test set predicted = pipeline.predict(Xtest) 

С помощью конвейеров вы можете легко выполнить сетку-поиск по набору параметров для каждого шага этой мета-оценки. Как описано в ссылке выше. Все шаги, кроме последнего, должны быть преобразованы, последним шагом может быть трансформатор или предиктор. Ответ на редактирование : когда вы вызываете pipln.fit() – каждый трансформатор внутри конвейера будет установлен на выходах предыдущего трансформатора (первый трансформатор изучается в необработанном наборе данных). Последняя оценка может быть преобразователем или предиктором, вы можете вызывать fit_transform () на конвейере только в том случае, если ваш последний оценщик является трансформатором (который реализует методы fit_transform или методы преобразования и подгонки отдельно), вы можете вызывать fit_predict () или pred () только на конвейере, только если ваша последняя оценка является предиктором. Таким образом, вы просто не можете вызвать fit_transform или преобразовать в конвейер, последний шаг которого является предиктором.

Я думаю, что M0rkHaV имеет правильную идею. Класс конвейера Scikit-learn – полезный инструмент для инкапсуляции нескольких разных трансформаторов вместе с оценкой в ​​один объект, поэтому вам нужно только один раз вызвать ваши важные методы ( fit() , predict() и т. Д.). Давайте разберем два основных компонента:

  1. Трансформаторы – это классы, которые реализуют как fit() и transform() . Возможно, вы знакомы с некоторыми инструментами предварительной обработки sklearn, такими как TfidfVectorizer и TfidfVectorizer . Если вы посмотрите на документы для этих инструментов предварительной обработки, вы увидите, что они реализуют оба этих метода. То, что я нахожу довольно крутым, состоит в том, что некоторые оценки могут также использоваться в качестве шагов преобразования, например LinearSVC !

  2. Оценщики – это классы, которые реализуют как fit() и predict() . Вы обнаружите, что многие из классификаторов и моделей регрессии реализуют оба этих метода, и поэтому вы можете легко тестировать множество разных моделей. В качестве конечной оценки можно использовать другой трансформатор (т. Е. Он не обязательно реализует predict() , но определенно реализует fit() ). Все это означает, что вы не сможете вызвать predict() .

Что касается вашего редактирования: давайте рассмотрим текстовый пример. Используя LabelBinarizer, мы хотим превратить список меток в список двоичных значений.

 bin = LabelBinarizer() #first we initialize vec = ['cat', 'dog', 'dog', 'dog'] #we have our label list we want binarized 

Теперь, когда бинаризатор установлен на некоторые данные, он будет иметь структуру под названием classes_ которая содержит уникальные классы, о которых трансформатор «знает». Без вызова fit() бинаризатор понятия не имеет, как выглядят данные, поэтому вызов transform() не имеет никакого смысла. Это верно, если вы распечатываете список классов, прежде чем пытаться поместить данные.

 print bin.classes_ 

При попытке выполнить следующие ошибки:

 AttributeError: 'LabelBinarizer' object has no attribute 'classes_' 

Но когда вы вписываете бинаризатор в список vec :

 bin.fit(vec) 

и попробуй еще раз

 print bin.classes_ 

Я получаю следующее:

 ['cat' 'dog'] print bin.transform(vec) 

И теперь, вызывая преобразование объекта vec , мы получаем следующее:

 [[0] [1] [1] [1]] 

Что касается оценок, используемых в качестве трансформаторов, то мы будем использовать классификатор DecisionTree в качестве примера функции-экстрактора. Деревья принятия решений велики по многим причинам, но для наших целей важно то, что они имеют возможность оценивать функции, которые дерево было полезно для прогнозирования. Когда вы вызываете transform() на дереве решений, он будет принимать ваши входные данные и находить то, что он считает наиболее важными функциями. Таким образом, вы можете думать о том, что он преобразует вашу матрицу данных (n строк по m столбцов) в меньшую матрицу (n строк по k столбцов), где k столбцов являются k наиболее важными функциями, найденными Деревом решений.

  • Матричное завершение в Python
  • ImportError: невозможно импортировать имя inplace_column_scale
  • Уменьшение размеров с помощью t-SNE
  • Использование файлов memmap для пакетной обработки
  • Можно ли использовать scikit из IronPython?
  • sklearn GaussianNB - плохие результаты, вероятности
  • Редкие реализации вычислений расстояния в python / scikit-learn
  • Получение распределения значений в листовом узле для DecisionTreeRegressor в scikit-learn
  • Python - лучший язык программирования в мире.