Построение конвейеров машинного обучения с использованием Scikit - Learn

Machine LearningMachine LearningBeginner
Практиковаться сейчас

This tutorial is from open-source community. Access the source code

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В машинном обучении конвейер (pipeline) — это последовательность шагов, которые выполняются по порядку для преобразования входных данных и затем построения модели. Scikit-learn предоставляет класс конвейера, который можно использовать для объединения нескольких этапов обработки в цепочку, что делает легким построение сложных моделей, которые включают несколько этапов предварительной обработки и моделирования.

В этом руководстве мы покажем, как построить конвейер с отбором признаков и классификацией с использованием SVM с помощью Scikit-learn. Мы покажем, как интегрировать отбор признаков в конвейер для предотвращения переобучения, и как изучить конвейер, чтобы лучше понять модель.

Советы по работе с ВМ

После запуска ВМ нажмите в левом верхнем углу, чтобы переключиться на вкладку Notebook и получить доступ к Jupyter Notebook для практики.

Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook загрузится. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.

Если вы сталкиваетесь с проблемами при обучении, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/ModelSelectionandEvaluationGroup(["Model Selection and Evaluation"]) sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) sklearn(("Sklearn")) -.-> sklearn/DataPreprocessingandFeatureEngineeringGroup(["Data Preprocessing and Feature Engineering"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/svm("Support Vector Machines") sklearn/DataPreprocessingandFeatureEngineeringGroup -.-> sklearn/feature_selection("Feature Selection") sklearn/DataPreprocessingandFeatureEngineeringGroup -.-> sklearn/pipeline("Pipeline") sklearn/ModelSelectionandEvaluationGroup -.-> sklearn/model_selection("Model Selection") sklearn/ModelSelectionandEvaluationGroup -.-> sklearn/metrics("Metrics") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/svm -.-> lab-49126{{"Построение конвейеров машинного обучения с использованием Scikit - Learn"}} sklearn/feature_selection -.-> lab-49126{{"Построение конвейеров машинного обучения с использованием Scikit - Learn"}} sklearn/pipeline -.-> lab-49126{{"Построение конвейеров машинного обучения с использованием Scikit - Learn"}} sklearn/model_selection -.-> lab-49126{{"Построение конвейеров машинного обучения с использованием Scikit - Learn"}} sklearn/metrics -.-> lab-49126{{"Построение конвейеров машинного обучения с использованием Scikit - Learn"}} sklearn/datasets -.-> lab-49126{{"Построение конвейеров машинного обучения с использованием Scikit - Learn"}} ml/sklearn -.-> lab-49126{{"Построение конвейеров машинного обучения с использованием Scikit - Learn"}} end

Создание и разделение набора данных

Начнем с создания бинарного датасета классификации с использованием функции make_classification из Scikit-learn. Также разделим датасет на тренировочную и тестовую подмножества с использованием функции train_test_split из Scikit-learn.

from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split

X, y = make_classification(
    n_features=20,
    n_informative=3,
    n_redundant=0,
    n_classes=2,
    n_clusters_per_class=2,
    random_state=42,
)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)

Построение конвейера

Теперь построим конвейер, состоящий из двух шагов: отбора признаков и классификации с использованием SVM. Для отбора признаков мы будем использовать функцию SelectKBest из Scikit-learn, а для классификации с использованием SVM — функцию LinearSVC из Scikit-learn. Функция SelectKBest выбирает k наиболее информативных признаков на основе метода f_classif, который вычисляет значение F-статистики ANOVA между каждым признаком и целевой переменной. В этом примере мы установим k = 3.

from sklearn.feature_selection import SelectKBest, f_classif
from sklearn.pipeline import make_pipeline
from sklearn.svm import LinearSVC

anova_filter = SelectKBest(f_classif, k=3)
clf = LinearSVC(dual="auto")
anova_svm = make_pipeline(anova_filter, clf)

Обучение конвейера

Теперь обучим конвейер на тренировочной подмножестве с использованием метода fit. Во время обучения функция SelectKBest выберет 3 наиболее информативных признака на основе значения F-статистики ANOVA, а функция LinearSVC обучит линейный классификатор SVM на выбранных признаках.

anova_svm.fit(X_train, y_train)

Оценка конвейера

Теперь оценим конвейер на тестовой подмножестве с использованием метода predict. Конвейер выберет 3 наиболее информативных признака на основе значения F-статистики ANOVA, а функция LinearSVC будет предсказывать значения на выбранных признаках.

from sklearn.metrics import classification_report

y_pred = anova_svm.predict(X_test)
print(classification_report(y_test, y_pred))

Просмотр конвейера

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

anova_svm[:-1].inverse_transform(anova_svm[-1].coef_)

Резюме

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