Я не могу понять, как sklearn.pipeline.Pipeline
именно работает.
Есть несколько объяснений в доке . Например, что они означают:
Конвейер преобразований с финальной оценкой.
Чтобы прояснить мой вопрос, какие steps
? Как они работают?
редактировать
Благодаря ответам я могу прояснить свой вопрос:
Когда я вызываю конвейер и передаю в качестве шагов два трансформатора и одну оценку, например:
pipln = Pipeline([("trsfm1",transformer_1),
("trsfm2",transformer_2),
("estmtr",estimator)])
Что происходит, когда я это звоню?
pipln.fit()
OR
pipln.fit_transform()
Я не могу понять, как оценщик может быть трансформатором и как можно установить трансформатор.
Ответы:
Transformer в scikit-learn - некоторый класс, у которого есть метод fit и transform, или метод fit_transform.
Predictor - некоторый класс, у которого есть методы соответствия и прогнозирования, или метод fit_predict.
Конвейер - это просто абстрактное понятие, это не какой-то существующий алгоритм ml. Часто в задачах машинного обучения вам необходимо выполнить последовательность различных преобразований (найти набор функций, создать новые функции, выбрать только некоторые хорошие функции) необработанного набора данных перед применением окончательной оценки.
Вот хороший пример использования конвейера. Конвейер предоставляет единый интерфейс для всех трех шагов преобразования и оценки результатов. Он инкапсулирует внутри преобразователи и предикторы, и теперь вы можете делать что-то вроде:
С помощью всего:
С помощью конвейеров вы можете легко выполнить поиск по сетке по набору параметров для каждого шага этой метаоценки. Как описано по ссылке выше. Все шаги, кроме последнего, должны быть преобразованы, последний шаг может быть преобразователем или предиктором. Ответ на редактирование : Когда вы звоните
pipln.fit()
- каждый трансформатор внутри конвейера будет установлен на выходах предыдущего трансформатора (первый трансформатор узнается в необработанном наборе данных). Последний оценщик может быть преобразователем или предсказателем, вы можете вызвать fit_transform () в конвейере, только если ваш последний оценщик является преобразователем (который реализует fit_transform или методы преобразования и подгонки отдельно), вы можете вызвать fit_predict () или прогнозировать () в конвейере, только если ваш последний оценщик - предсказатель. Таким образом, вы просто не можете вызвать fit_transform или преобразовать в конвейере, последний шаг которого является предиктором.источник
predicted = pipeline.fit(Xtrain).predict(Xtrain)
?Я думаю, что у M0rkHaV правильная идея. Класс конвейера Scikit-learn - полезный инструмент для инкапсуляции нескольких разных преобразователей вместе с оценщиком в один объект, так что вам нужно вызывать важные методы только один раз (
fit()
,predict()
и т. Д.). Давайте разберем два основных компонента:Трансформаторы - это классы, реализующие
fit()
иtransform()
. Возможно, вы знакомы с некоторыми инструментами предварительной обработки sklearn, такими какTfidfVectorizer
иBinarizer
. Если вы посмотрите документацию по этим инструментам предварительной обработки, вы увидите, что они реализуют оба этих метода. Что я считаю довольно крутым, так это то, что некоторые оценщики также могут использоваться как шаги преобразования, напримерLinearSVC
!Оценщики - это классы, которые реализуют
fit()
иpredict()
. Вы обнаружите, что многие классификаторы и регрессионные модели реализуют оба этих метода, и поэтому вы можете легко протестировать множество различных моделей. Можно использовать другой преобразователь в качестве окончательного оценщика (т.е. он не обязательно реализуетpredict()
, но определенно реализуетfit()
). Все это означает, что вы не сможете позвонитьpredict()
.Что касается вашего редактирования: давайте рассмотрим текстовый пример. Используя LabelBinarizer, мы хотим превратить список меток в список двоичных значений.
Теперь, когда бинаризатор настроен на некоторые данные, у него будет вызванная структура
classes_
, содержащая уникальные классы, о которых преобразователь «знает». Без вызоваfit()
бинаризатора понятия не имеет, как выглядят данные, поэтому вызовtransform()
не имеет смысла. Это верно, если вы распечатываете список классов, прежде чем пытаться уместить данные.При этом я получаю следующую ошибку:
Но когда вы поместите бинаризатор в
vec
список:и попробуй еще раз
Получаю следующее:
И теперь, после вызова transform на
vec
объекте, мы получаем следующее:Что касается оценщиков, используемых в качестве преобразователей, давайте воспользуемся
DecisionTree
классификатором в качестве примера экстрактора признаков. Деревья решений хороши по многим причинам, но для наших целей важно то, что они имеют возможность ранжировать функции, которые дерево сочло полезными для прогнозирования. Когда вы вызываетеtransform()
дерево решений, оно берет ваши входные данные и обнаруживает, что, по его мнению, является наиболее важными функциями. Таким образом, вы можете представить себе преобразование вашей матрицы данных (n строк на m столбцов) в меньшую матрицу (n строк на k столбцов), где k столбцов - это k наиболее важных функций, обнаруженных деревом решений.источник
fit()
иtransform()
есть Трансформеры? , как оценщики можно использовать в качестве преобразователей?fit()
- это метод, который вы вызываете, чтобы подогнать или «обучить» свой трансформатор, как если бы вы использовали классификатор или регрессионную модель. Что касаетсяtransform()
, это метод, который вы вызываете для фактического преобразования входных данных в выходные данные. Например, вызовBinarizer.transform([8,2,2])
(после примерки!) Может привести к[[1,0],[0,1],[0,1]]
. Что касается использования оценщиков в качестве преобразователей, я отредактирую небольшой пример в своем ответе.Что такое конвейеры машинного обучения и как они работают?
Конвейер - это последовательность этапов преобразования данных. Это происходит из старого шаблона проектирования «конвейер и фильтр» (например, вы можете подумать о командах unix bash с конвейерами «|» или операторами перенаправления «>»). Однако конвейеры - это объекты кода. Таким образом, у вас может быть класс для каждого фильтра (он же каждый шаг конвейера), а затем другой класс для объединения этих шагов в окончательный конвейер. Некоторые конвейеры могут объединять другие конвейеры последовательно или параллельно, иметь несколько входов или выходов и так далее. Нам нравится рассматривать конвейеры машинного обучения как:
Методы конвейера Scikit-Learn
У конвейеров (или шагов в конвейере) должны быть эти два метода :
Также можно вызвать этот метод для объединения обоих:
Проблемы класса sklearn.pipeline.Pipeline
Scikit-Learn выпустила свой первый выпуск в 2007 году, когда еще не было глубокого обучения . Тем не менее, это одна из самых известных и распространенных библиотек машинного обучения, которая продолжает расти. Помимо всего прочего, он использует шаблон проектирования «Труба и фильтр» в качестве архитектурного стиля программного обеспечения - это то, что делает Scikit-Learn таким потрясающим, в дополнение к тому факту, что он предоставляет готовые к использованию алгоритмы. Однако у него есть серьезные проблемы, когда дело доходит до следующего, что мы сможем сделать уже в 2020 году:
Решения, которые мы нашли для проблем Scikit-Learn
Безусловно, Scikit-Learn очень удобен и хорошо построен. Однако его нужно обновить. Вот наши решения с Neuraxle, чтобы сделать Scikit-Learn свежим и пригодным для использования в современных вычислительных проектах!
Дополнительные методы и функции конвейера, предлагаемые Neuraxle
Примечание: если для шага конвейера не требуется один из методов подгонки или преобразования, он может унаследоваться от NonFittableMixin или NonTransformableMixin, чтобы обеспечить реализацию по умолчанию одного из этих методов, которая ничего не делает.
Вначале конвейеры или их шаги могут также опционально определять эти методы :
В следующих методах предоставляются по умолчанию для обеспечения управления гиперпараметрами:
RandInt(1, 3)
1 до 3 слоев. Вы можете вызвать.rvs()
этот диктатор, чтобы случайным образом выбрать значение и отправить его в «set_hyperparams», чтобы попробовать на нем обучение.Для получения дополнительной информации о предлагаемых нами решениях прочтите записи в большом списке со ссылками выше.
источник