构建 Scikit-Learn 管道

Machine LearningMachine LearningBeginner
立即练习

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

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

本实验是关于如何在 Scikit-Learn 中构建和显示管道的分步指南。

虚拟机提示

虚拟机启动完成后,点击左上角切换到“笔记本”标签,以访问 Jupyter Notebook 进行练习。

有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,随时向 Labby 提问。课程结束后提供反馈,我们会立即为你解决问题。

构建一个包含预处理步骤和分类器的简单管道

在这一步中,我们将构建一个包含预处理步骤和分类器的简单管道,并展示其可视化表示。

首先,我们导入必要的模块:

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn import set_config

接下来,我们定义管道的步骤:

steps = [
    ("预处理", StandardScaler()),
    ("分类器", LogisticRegression()),
]

然后,我们创建管道:

pipe = Pipeline(steps)

最后,我们展示管道的可视化表示:

set_config(display="diagram")
pipe

构建一个链接多个预处理步骤和分类器的管道

在这一步中,我们将构建一个包含多个预处理步骤和一个分类器的管道,并展示其可视化表示。

首先,我们导入必要的模块:

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler, PolynomialFeatures
from sklearn.linear_model import LogisticRegression

接下来,我们定义管道的步骤:

steps = [
    ("标准缩放器", StandardScaler()),
    ("多项式特征", PolynomialFeatures(degree=3)),
    ("分类器", LogisticRegression(C=2.0)),
]

然后,我们创建管道:

pipe = Pipeline(steps)

最后,我们展示管道的可视化表示:

pipe

构建一个带有降维和分类器的管道

在这一步中,我们将构建一个带有降维步骤和分类器的管道,并展示其可视化表示。

首先,我们导入必要的模块:

from sklearn.pipeline import Pipeline
from sklearn.svm import SVC
from sklearn.decomposition import PCA

接下来,我们定义管道的步骤:

steps = [("降维", PCA(n_components=4)), ("分类器", SVC(kernel="linear"))]

然后,我们创建管道:

pipe = Pipeline(steps)

最后,我们展示管道的可视化表示:

pipe

构建一个链接列变换器的复杂管道

在这一步中,我们将构建一个带有列变换器和分类器的复杂管道,并展示其可视化表示。

首先,我们导入必要的模块:

import numpy as np
from sklearn.pipeline import make_pipeline
from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder, StandardScaler
from sklearn.linear_model import LogisticRegression

接下来,我们定义数值型和分类型特征的预处理步骤:

numeric_preprocessor = Pipeline(
    steps=[
        ("均值插补", SimpleImputer(missing_values=np.nan, strategy="mean")),
        ("缩放器", StandardScaler()),
    ]
)

categorical_preprocessor = Pipeline(
    steps=[
        (
            "常量插补",
            SimpleImputer(fill_value="缺失", strategy="constant"),
        ),
        ("独热编码", OneHotEncoder(handle_unknown="ignore")),
    ]
)

然后,我们创建列变换器:

preprocessor = ColumnTransformer(
    [
        ("分类型", categorical_preprocessor, ["州", "性别"]),
        ("数值型", numeric_preprocessor, ["年龄", "体重"]),
    ]
)

接下来,我们创建管道:

pipe = make_pipeline(preprocessor, LogisticRegression(max_iter=500))

最后,我们展示管道的可视化表示:

pipe

对带有分类器的管道进行网格搜索

在这一步中,我们将对带有分类器的管道进行网格搜索,并展示其可视化表示。

首先,我们导入必要的模块:

import numpy as np
from sklearn.pipeline import make_pipeline
from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder, StandardScaler
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV

接下来,我们定义数值型和分类型特征的预处理步骤:

numeric_preprocessor = Pipeline(
    steps=[
        ("均值插补", SimpleImputer(missing_values=np.nan, strategy="mean")),
        ("缩放器", StandardScaler()),
    ]
)

categorical_preprocessor = Pipeline(
    steps=[
        (
            "常量插补",
            SimpleImputer(fill_value="缺失", strategy="constant"),
        ),
        ("独热编码", OneHotEncoder(handle_unknown="ignore")),
    ]
)

然后,我们创建列变换器:

preprocessor = ColumnTransformer(
    [
        ("分类型", categorical_preprocessor, ["州", "性别"]),
        ("数值型", numeric_preprocessor, ["年龄", "体重"]),
    ]
)

接下来,我们创建管道:

pipe = Pipeline(
    steps=[("预处理", preprocessor), ("分类器", RandomForestClassifier())]
)

然后,我们定义网格搜索的参数网格:

param_grid = {
    "分类器__n_estimators": [200, 500],
    "分类器__max_features": ["auto", "sqrt", "log2"],
    "分类器__max_depth": [4, 5, 6, 7, 8],
    "分类器__criterion": ["gini", "entropy"],
}

最后,我们创建网格搜索:

grid_search = GridSearchCV(pipe, param_grid=param_grid, n_jobs=1)

并展示网格搜索的可视化表示:

grid_search

总结

本实验提供了一份关于如何在 Scikit-Learn 中构建和展示管道的分步指南。我们涵盖了带有预处理步骤和分类器的简单管道、链接多个预处理步骤和一个分类器的管道、带有降维和一个分类器的管道、链接列变换器和一个分类器的复杂管道,以及对带有分类器的管道进行网格搜索。