make pipeline sklearn что это

6.1. Pipelines and composite estimators¶

6.1.1. Pipeline: chaining estimators¶

Pipeline can be used to chain multiple estimators into one. This is useful as there is often a fixed sequence of steps in processing the data, for example feature selection, normalization and classification. Pipeline serves multiple purposes here:

Convenience and encapsulation

You only have to call fit and predict once on your data to fit a whole sequence of estimators.

Joint parameter selection

You can grid search over parameters of all estimators in the pipeline at once.

Pipelines help avoid leaking statistics from your test data into the trained model in cross-validation, by ensuring that the same samples are used to train the transformers and predictors.

All estimators in a pipeline, except the last one, must be transformers (i.e. must have a transform method). The last estimator may be any type (transformer, classifier, etc.).

6.1.1.1. Usage¶

6.1.1.1.1. Construction¶

The Pipeline is built using a list of (key, value) pairs, where the key is a string containing the name you want to give this step and value is an estimator object:

The utility function make_pipeline is a shorthand for constructing pipelines; it takes a variable number of estimators and returns a pipeline, filling in the names automatically:

6.1.1.1.2. Accessing steps¶

The estimators of a pipeline are stored as a list in the steps attribute, but can be accessed by index or name by indexing (with [idx] ) the Pipeline:

Pipeline’s named_steps attribute allows accessing steps by name with tab completion in interactive environments:

A sub-pipeline can also be extracted using the slicing notation commonly used for Python Sequences such as lists or strings (although only a step of 1 is permitted). This is convenient for performing only some of the transformations (or their inverse):

6.1.1.1.3. Nested parameters¶

Parameters of the estimators in the pipeline can be accessed using the __

This is particularly important for doing grid searches:

Individual steps may also be replaced as parameters, and non-final steps may be ignored by setting them to ‘passthrough’ :

The estimators of the pipeline can be retrieved by index:

To enable model inspection, Pipeline has a get_feature_names_out() method, just like all transformers. You can use pipeline slicing to get the feature names going into each step:

You can also provide custom feature names for the input data using get_feature_names_out :

6.1.1.2. Notes¶

Calling fit on the pipeline is the same as calling fit on each estimator in turn, transform the input and pass it on to the next step. The pipeline has all the methods that the last estimator in the pipeline has, i.e. if the last estimator is a classifier, the Pipeline can be used as a classifier. If the last estimator is a transformer, again, so is the pipeline.

6.1.1.3. Caching transformers: avoid repeated computation¶

The parameter memory is needed in order to cache the transformers. memory can be either a string containing the directory where to cache the transformers or a joblib.Memory object:

Side effect of caching transformers

Using a Pipeline without cache enabled, it is possible to inspect the original instance such as:

Enabling caching triggers a clone of the transformers before fitting. Therefore, the transformer instance given to the pipeline cannot be inspected directly. In following example, accessing the PCA instance pca2 will raise an AttributeError since pca2 will be an unfitted transformer. Instead, use the attribute named_steps to inspect estimators within the pipeline:

6.1.2. Transforming target in regression¶

TransformedTargetRegressor transforms the targets y before fitting a regression model. The predictions are mapped back to the original space via an inverse transform. It takes as an argument the regressor that will be used for prediction, and the transformer that will be applied to the target variable:

For simple transformations, instead of a Transformer object, a pair of functions can be passed, defining the transformation and its inverse mapping:

Subsequently, the object is created as:

By default, the provided functions are checked at each fit to be the inverse of each other. However, it is possible to bypass this checking by setting check_inverse to False :

6.1.3. FeatureUnion: composite feature spaces¶

FeatureUnion combines several transformer objects into a new transformer that combines their output. A FeatureUnion takes a list of transformer objects. During fitting, each of these is fit to the data independently. The transformers are applied in parallel, and the feature matrices they output are concatenated side-by-side into a larger matrix.

When you want to apply different transformations to each field of the data, see the related class ColumnTransformer (see user guide ).

FeatureUnion and Pipeline can be combined to create complex models.

(A FeatureUnion has no way of checking whether two transformers might produce identical features. It only produces a union when the feature sets are disjoint, and making sure they are is the caller’s responsibility.)

6.1.3.1. Usage¶

A FeatureUnion is built using a list of (key, value) pairs, where the key is the name you want to give to a given transformation (an arbitrary string; it only serves as an identifier) and value is an estimator object:

Like pipelines, feature unions have a shorthand constructor called make_union that does not require explicit naming of the components.

6.1.4. ColumnTransformer for heterogeneous data¶

Many datasets contain features of different types, say text, floats, and dates, where each type of feature requires separate preprocessing or feature extraction steps. Often it is easiest to preprocess data before applying scikit-learn methods, for example using pandas. Processing your data before passing it to scikit-learn might be problematic for one of the following reasons:

Читайте также:  при постановке какого звука используется шариковый зонд

Incorporating statistics from test data into the preprocessors makes cross-validation scores unreliable (known as data leakage), for example in the case of scalers or imputing missing values.

The ColumnTransformer helps performing different transformations for different columns of the data, within a Pipeline that is safe from data leakage and that can be parametrized. ColumnTransformer works on arrays, sparse matrices, and pandas DataFrames.

To each column, a different transformation can be applied, such as preprocessing or a specific feature extraction method:

In the above example, the CountVectorizer expects a 1D array as input and therefore the columns were specified as a string ( ‘title’ ). However, OneHotEncoder as most of other transformers expects 2D data, therefore in that case you need to specify the column as a list of strings ( [‘city’] ).

Strings can reference columns if the input is a DataFrame, integers are always interpreted as the positional columns.

The remainder parameter can be set to an estimator to transform the remaining rating columns. The transformed values are appended to the end of the transformation:

The make_column_transformer function is available to more easily create a ColumnTransformer object. Specifically, the names will be given automatically. The equivalent for the above example would be:

If ColumnTransformer is fitted with a dataframe and the dataframe only has string column names, then transforming a dataframe will use the column names to select the columns:

6.1.5. Visualizing Composite Estimators¶

Estimators can be displayed with a HTML representation when shown in a jupyter notebook. This can be useful to diagnose or visualize a Pipeline with many estimators. This visualization is activated by setting the display option in set_config :

Источник

Использование Pipeline в работе с данными

В своей работе Data Scientist используют различные модели для улучшения качества метрик. Чтобы применить модель, предварительно необходимо затратить существенные ресурсы на обработку всего массива необработанных данных. Мы расскажем об инструменте, которым пользуемся для оптимизации этого процесса. Инструмент Pipeline позволяет объединить несколько операций обработки данных в единую модель библиотеки Python «Scikit-learn».

Рассмотрим его применение более подробно.

Класс Pipeline предусматривает методы fit, predict и score, имеющие свойства, аналогичные свойствам модели в библиотеке «Sckit-learn». В Машинном обучении чаще всего класс Pipeline используется для объединения операций предварительной обработки (например, масштабирования данных или one-hot-encoding) с моделью машинного обучения типа классификаторов. Его использование позволяет избежать ошибок и сокращает временные издержки.

Вот как это выглядит схематически.

Другими словами, применяется определённая последовательность действий к необработанным данным (в первую очередь осуществляется трансформирование данных, а уже после: масштабирование числовых переменных, one-hot-encoding и так далее). В принципе в T1(), T2() …Tn() может быть любой код по предобработке данных.

Основное преимущество Pipeline:

Рассмотрим абстрактный датасет, в котором содержатся численные и категориальные значения для последующей обработки (для того чтобы можно было применить различные модели).

Такой код, чаще всего можно увидеть на различных соревновательных платформах:

На данном примере видно, что код дублируется. Для исключения дублирования кода, можно написать функцию, которая будет проделывать вышеперечисленные операции. Но нужно помнить, что масштабировать данные нужно только на обучающей выборке, а применять масштабирование как на обучающей, так и на тестовой выборке, что будет способствовать наличию дополнительных условий.

Теперь рассмотрим инструмент Pipeline с дополнительным набором функций:

Таким образом код с использованием Pipeline будет выглядеть следующим образом:

Отметим, что Pipline можно вкладывать в другие pipeline, что позволяет осуществлять сложную обработку данных с помощью одной абстракции.

Вот так, применение инструментов Pipeline позволяет оптимизировать работу Data Scientist, что способствует повышению качества и скорости работы в целом.

Источник

Пайплайн (Pipeline)

Пайплайн – 1. Последовательные стадии преобразования данных, предшествующие их загрузке в Модель (Model). 2. Класс библиотеки Scikit-learn, последовательно применяющий к исходным данным настраиваемые преобразования. 3. Автоматизируемая последовательность обучения и оптимизации модели в PyTorch и других библиотеках.

Пайплайн как последовательность

Извлечение

Этот этап включает сбор данных из Интернета или баз данных и конвертация в определенные форматы.

Скраббинг

Это очистка данных и самый трудоемкий этап и требует наибольших усилий. Он делится на два этапа:

Разведочный анализ данных (EDA)

Когда данные достигают этого этапа, они не содержат ошибок и пропущенных значений и, следовательно, подходят для поиска закономерностей с использованием визуализации.

Великолепная библиотека для всестороннего разведочного анализа – pandas-profiling. На изображении ниже отдельно взятый признак Датасета (Dataset) о клиентах банка – длительность телефонного разговора, выраженный Вещественным числом (Real Number), исследуется с разных точек зрения: количества уникальных значений (Distinct), пропусков (Missing), Слишком удаленных значений (Infinite), Среднего арифметического (Mean), Минимума (Minimum), Максимума (Maximum), нулевых значений (Zeros), используемой признаком памяти (Memory size).

Моделирование

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

Визуализация предсказания энергопотребления

Интерпретация

Это перефразирование Инсайтов (Insight) Вашей модели, ключевой этап, на котором с использованием психологических методов, специфических знаний о бизнесе и навыков презентации Вы можете преподнести свою модель заказчику и широкой аудитории вообще.

Пересмотр

По мере изменения бизнес-ситуации появляются новые переменные, которые могут снизить качество существующих моделей. Потому периодические обновления – неотъемлемая часть работы.

Наука о данных – это не просто уникальные алгоритмы Машинного обучения, но и решения, которые вы предоставляете на их основе. Очень важно убедиться, что пайплайн выдержит возможные незначительные изменения формы данных, и вы точно определяете бизнес-проблематику, чтобы впоследствии предлагать точные решения.

Читайте также:  Что значит ход людскому

Пайплайн Scikit-learn

Импортируем данные, которые для Вашего удобства залиты на Dropbox. Чтобы повторить это позднее, установите параметр dl=1 после вопросительного знака в конце ссылки, это разрешит скачивание файла:

Для того, чтобы сконцентрировать внимание на пайплайнах, мы будем использовать датасет с выполненным Конструированием признаков (Feature Engineering). Последнее добавило Датафрейму (Dataframe) следующие признаки:

Как просто, на первый взгляд, определить авторский стиль! Всего-то определить, насколько автор склонен ругаться, да подсчитать запятые. Но все не так просто. Мы будем работать с таким датафреймом:

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

Зададим вспомогательные функции, выбирающие из датафрейма текстовые и числовые признаки для автоматизации преобразований в пайплайнах:

Создадим пайплайн, последовательно выбирающий каждый столбец, затем выполним преобразование в матрицу TF-IDF только для этого столбца и вернем результат. Для каждого использованного слова мы определим Меру оценки его важности в контексте документа (TF-IDF):

Компилятор уведомляет нас, что матрица существенно выросла и состоит из 13 с лишним тысяч столбцов вещественных чисел, причем некоторые ячейки пустуют (sparse). В сжатом виде ячеек, несущих значения, чуть больше 148 тысяч.

Стандартизуем признак «длина» [поста] с использованием селектора числовых признаков:

Пайплайн показывает нам, что ряд, прошедший Стандартизацию (Standartization), выглядит так:

Объединим признаки, характеризующие стиль автора, с помощью FeatureUnion:

Теперь прогоним объединение признаков, характеризующих уникальность автора, через пайплайн:

Несмотря на то, что форма матрицы осталась прежней, ее наполненность увеличилась до 213+ тысяч:

Используем сгенерированные признаки, характеризующие авторский стиль, для предсказания# с помощью классификатора «случайный лес»:

Аккуратность (Accuracy) достигла 67%, и для начала это хороший результат. Но для реальных проектов этого недостаточно. Интуитивное ощущение, что такого скромного набора метаданных для идентификации автора среди миллионов других, оказалось верным.

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

Источник

6.1. Пайплайны и составные оценщики ¶

scikit-learn предоставляет библиотеку преобразователей, которые могут очищать (см. Предварительная обработка данных ), уменьшать (см. Неконтролируемое уменьшение размерности ), расширять (см. Аппроксимация ядра ) или генерировать (см. Извлечение функций ) представления функций.

Как и другие оценщики, они представлены классами с fit методом, который изучает параметры модели (например, среднее значение и стандартное отклонение для нормализации) из обучающего набора, и transform методом, который применяет эту модель преобразования к невидимым данным. fit_transform может быть более удобным и эффективным для одновременного моделирования и преобразования обучающих данных.

Преобразователи обычно комбинируются с классификаторами, регрессорами или другими оценщиками для построения составного оценщика. Самый распространенный инструмент — пайплайн (конвейер). Конвейер часто используется в сочетании с FeatureUnion, который объединяет выходные данные преобразователей в составное пространство функций. TransformedTargetRegressor занимается преобразованием цели (т. Е. Логарифмическим преобразованием y ). Напротив, конвейеры преобразуют только наблюдаемые данные ( X ).

6.1.1. Конвейер: объединение оценок

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

Вам нужно только один раз вызвать fit и predict свои данные, чтобы они соответствовали всей последовательности оценщиков.Совместный выбор параметров

Вы можете выполнять поиск по сетке сразу по параметрам всех оценщиков в конвейере.Безопасность

Конвейеры помогают избежать утечки статистики из ваших тестовых данных в обученную модель при перекрестной проверке, гарантируя, что одни и те же образцы используются для обучения преобразователей и предикторов.

Все оценщики в конвейере, кроме последнего, должны быть преобразователями (т. Е. Должны иметь метод transform ). Последний оценщик может быть любого типа (преобразователь, классификатор и т. д.).

6.1.1.1. Использование

6.1.1.1.1. Строительство

Функция полезности make_pipeline — это сокращение для построения конвейеров; он принимает переменное количество оценщиков и возвращает конвейер, автоматически заполняя имена:

6.1.1.1.2. Доступ к шагам

Оценщики конвейера хранятся в виде списка в steps атрибуте, но могут быть доступны по индексу или имени путем индексации (с [idx] ) конвейера:

Атрибут named_steps конвейера позволяет получить доступ к шагам по имени с завершением табуляции в интерактивных средах:

Подконвейер также может быть извлечен с использованием нотации срезов, обычно используемой для последовательностей Python, таких как списки или строки (хотя разрешен только шаг 1). Это удобно для выполнения только некоторых преобразований (или их обратных):

6.1.1.1.3. Вложенные параметры

Доступ к параметрам оценщиков в конвейере можно получить с помощью __

Это особенно важно для поиска по сетке:

Отдельные шаги также можно заменить как параметры, а незавершенные шаги можно игнорировать, установив для них ‘passthrough’ :

Оценщики конвейера можно получить по индексу:

6.1.1.2. Примечания

Вызов fit конвейера — это то же самое, что вызов fit каждого оценщика по очереди, transform ввод и передача его следующему шагу. В конвейере есть все методы, которые есть у последнего оценщика в конвейере, т. е. Если последний оценщик является классификатором, его Pipeline можно использовать в качестве классификатора. Если последний оценщик — трансформатор, опять же, конвейер.

6.1.1.3. Кэширующие трансформаторы: избегайте повторных вычислений

Параметр memory нужен для кеширования трансформаторов. memory может быть либо строкой, содержащей каталог для кэширования преобразователей, либо объектом joblib.Memory :

Предупреждение Побочный эффект кеширования трансформаторов

Используя Pipeline без включенного кеша, можно проверить исходный экземпляр, например:

Включение кэширования запускает клонирование трансформаторов перед установкой. Следовательно, экземпляр трансформатора, передаваемый в трубопровод, не может быть проверен напрямую. В следующем примере при доступе к PCA экземпляру pca2 будет подниматься, AttributeError поскольку pca2 трансформатор будет непригодным. Вместо этого используйте атрибут named_steps для проверки оценщиков в конвейере:

6.1.2. Преобразование цели в регрессии

TransformedTargetRegressor преобразует цели y перед подгонкой регрессионной модели. Прогнозы отображаются обратно в исходное пространство с помощью обратного преобразования. Он принимает в качестве аргумента регрессор, который будет использоваться для прогнозирования, и преобразователь, который будет применен к целевой переменной:

Читайте также:  при какой температуре погибает парвовирус

Для простых преобразований вместо объекта Transformer можно передать пару функций, определяющих преобразование и его обратное отображение:

Впоследствии объект создается как:

По умолчанию предоставленные функции проверяются при каждой подгонке как противоположные друг другу. Тем не менее, можно обойти эту проверку, установив check_inverse на False :

6.1.3. FeatureUnion: составные пространственные объекты

FeatureUnion объединяет несколько объектов-преобразователей в новый преобразователь, который объединяет их выходные данные. FeatureUnion принимает список объектов-преобразователей. Во время подгонки каждый из них подбирается к данным независимо. Трансформаторы применяются параллельно, а выводимые ими матрицы характеристик объединяются бок о бок в более крупную матрицу.

Если вы хотите применить различные преобразования к каждому полю данных, см. Соответствующий класс ColumnTransformer (см. Руководство пользователя ).

FeatureUnion служит тем же целям, что и Pipeline — удобство и совместная оценка и проверка параметров.

FeatureUnion и Pipeline их можно комбинировать для создания сложных моделей.

( FeatureUnion не имеет возможности проверить, могут ли два преобразователя создавать идентичные функции. Он создает объединение только в том случае, если наборы функций не пересекаются, и ответственность за их соответствие лежит на вызывающей стороне.)

6.1.3.1. Использование

Создается FeatureUnion с использованием списка пар (key, value), где key- имя, которое вы хотите дать данному преобразованию (произвольная строка; она служит только идентификатором), и value является объектом оценки:

6.1.4. ColumnTransformer для разнородных данных

К каждому столбцу может быть применено различное преобразование, такое как предварительная обработка или определенный метод извлечения признаков:

Строки могут ссылаться на столбцы, если входом является DataFrame, целые числа всегда интерпретируются как позиционные столбцы.

Параметр remainder может быть установлен в качестве оценки для преобразования оставшегося рейтинга столбцов. Преобразованные значения добавляются в конец преобразования:

Функция make_column_transformer доступна более легко создать ColumnTransformer объект. В частности, имена будут даны автоматически. Эквивалент для приведенного выше примера:

6.1.5. Визуализация составных оценщиков

Оценщики могут отображаться в формате HTML при отображении в записной книжке jupyter. Это может быть полезно для диагностики или визуализации конвейера с помощью множества оценщиков. Эта визуализация активируется установкой display параметра в set_config :

Пример вывода HTML можно увидеть в представлении HTML раздела конвейера преобразователя столбцов со смешанными типами. В качестве альтернативы HTML можно записать в файл, используя estimator_html_repr :

Источник

Простой пример конвейера в машинном обучении с Scikit-learn

Дата публикации Nov 12, 2018

Сегодняшняя статья будет короткой и четкой, и я покажу вам пример использования Pipeline в машинном обучении с python. Я буду использовать некоторые другие важные инструменты, такие как GridSearchCV и т.д., чтобы продемонстрировать реализацию конвейера и, наконец, объяснить, почему конвейер действительно необходим в некоторых случаях. Давайте начнем

Значение pipeline класс в соответствии с наукой

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

Мы всегда можем проверить графики корреляции с seaborn или же мы можем построить некоторые из элементов с помощью точечной диаграммы, и ниже приведены два таких графика.

Как и ожидалось, кислотность и pH имеют высокую отрицательную корреляцию по сравнению с остаточным сахаром и кислотностью. Как только мы познакомимся и поиграемся с набором данных, давайте обсудим и реализуем конвейер.

Как подсказывает название, pipeline класс позволяет объединить несколько процессов в единую оценку scikit-learn. pipeline класс имеет метод подбора, прогнозирования и оценки, как и любой другой оценщик(Напр. LinearRegression ).

Для реализации конвейера, как обычно, сначала мы отделяем элементы и метки от набора данных.

Если вы посмотрели на вывод pd.head(3) затем вы можете увидеть, что функции набора данных варьируются в широких пределах. Как я уже объяснил, так же, какАнализ главных компонентовнекоторые алгоритмы подгонки нуждаются в масштабировании, и здесь я буду использовать один такой, известный как SVM (Support Vector Machine). Больше о теории SVM вы можете проверитьдругой пост,

Строки (‘Scaler’, ‘SVM’) могут быть любыми, так как это просто имена для четкой идентификации трансформатора или оценки. Мы можем использовать make_pipeline вместо конвейера, чтобы избежать называя оценщик или трансформатор.Последний шаг должен быть оценщиком в этом списке кортежей.

Необходимо использовать stratify как я уже упоминал ранее, этикетки несбалансированы, так как большая часть качества вина находится в диапазоне 5,6.Вы можете проверить с помощью панд value_counts() который возвращает объекты, содержащие количество уникальных значений.

Теперь мы создаем GridSearchCV объект с конвейером и пространством параметров с 5-кратной перекрестной проверкой.

Мы можем использовать это, чтобы соответствовать набору обучающих данных и протестировать алгоритм на наборе тестовых данных. Также мы можем найти наиболее подходящие параметры для SVM, как показано ниже

При этом мы увидели пример эффективного использования конвейера с поиском по сетке для тестирования алгоритма машины опорных векторов.На отдельный постЯ подробно рассказал о применении конвейера и GridSearchCV и о том, как нарисовать функцию принятия решения для SVM. Вы можете использовать любой другой алгоритм, например, логистическую регрессию, вместо SVM, чтобы проверить, какой алгоритм обучения лучше всего подходит для набора данных «красное вино».

Почему Трубопровод:

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

[1] Андреас Мюллер, Сара Гвидо; Введение в машинное обучение с Python; С.-305-320; Первое издание; Публикация Райли О ‘;amazonlink

Источник

Сказочный портал