kaggleIntermediateMachineLearningPipelines
在本教程中,您将学习如何使用管道来清理您的建模代码。
简介
管道是一种让您的数据预处理和建模代码井然有序的简单方法。具体来说,管道将预处理和建模步骤捆绑在一起,以便您可以像使用单个步骤一样使用整个捆绑包。
许多数据科学家在不使用管道的情况下拼凑模型,但管道有一些重要的好处。这些好处包括:
- 更清晰的代码:在预处理的每个步骤中计算数据可能会变得混乱。使用管道,您无需在每个步骤中手动跟踪训练和验证数据。
- 更少的错误:误用步骤或忘记预处理步骤的机会更少。
- 更容易投入生产:将模型从原型过渡到可大规模部署的模型可能出奇地困难。我们在这里不会讨论许多相关的问题,但管道可以提供帮助。
- 更多模型验证选项:您将在下一个教程中看到一个涵盖交叉验证的示例。
示例
与上一个教程一样,我们将使用墨尔本住房数据集。
我们不会重点介绍数据加载步骤。您可以假设您已经拥有 X_train、X_valid、y_train 和 y_valid 中的训练和验证数据。
import pandas as pd |
我们使用下面的 head() 方法查看训练数据。请注意,数据包含分类数据和缺失值的列。使用管道,可以轻松处理这两种情况!
X_train.head() |
| Type | Method | Regionname | Rooms | Distance | Postcode | Bedroom2 | Bathroom | Car | Landsize | BuildingArea | YearBuilt | Lattitude | Longtitude | Propertycount | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 12167 | u | S | Southern Metropolitan | 1 | 5.0 | 3182.0 | 1.0 | 1.0 | 1.0 | 0.0 | NaN | 1940.0 | -37.85984 | 144.9867 | 13240.0 |
| 6524 | h | SA | Western Metropolitan | 2 | 8.0 | 3016.0 | 2.0 | 2.0 | 1.0 | 193.0 | NaN | NaN | -37.85800 | 144.9005 | 6380.0 |
| 8413 | h | S | Western Metropolitan | 3 | 12.6 | 3020.0 | 3.0 | 1.0 | 1.0 | 555.0 | NaN | NaN | -37.79880 | 144.8220 | 3755.0 |
| 2919 | u | SP | Northern Metropolitan | 3 | 13.0 | 3046.0 | 3.0 | 1.0 | 1.0 | 265.0 | NaN | 1995.0 | -37.70830 | 144.9158 | 8870.0 |
| 6043 | h | S | Western Metropolitan | 3 | 13.3 | 3020.0 | 3.0 | 1.0 | 2.0 | 673.0 | 673.0 | 1970.0 | -37.76230 | 144.8272 | 4217.0 |
我们分三步构建完整的流程。
步骤 1:定义预处理步骤
与流程捆绑预处理和建模步骤的方式类似,我们使用 ColumnTransformer 类将不同的预处理步骤捆绑在一起。以下代码:
- 估算数值数据中的缺失值;
- 估算分类数据的缺失值并应用独热编码。
from sklearn.compose import ColumnTransformer |
步骤 2:定义模型
接下来,我们使用我们熟悉的 RandomForestRegressor 类定义一个随机森林模型。
from sklearn.ensemble import RandomForestRegressor |
步骤 3:创建并评估管道
最后,我们使用 Pipeline 类来定义一个管道,将预处理和建模步骤捆绑在一起。以下是一些需要注意的重要事项:
- 使用管道,我们可以在一行代码中预处理训练数据并拟合模型。(相比之下,如果没有管道,我们必须在不同的步骤中执行插补、独热编码和模型训练。如果我们需要同时处理数值变量和分类变量,这将变得尤其混乱!)
- 使用管道,我们将
X_valid中未处理的特征提供给predict()命令,管道会在生成预测之前自动预处理这些特征。(但是,如果没有管道,我们必须记住在进行预测之前预处理验证数据。)
from sklearn.metrics import mean_absolute_error |
结论
流水线对于清理机器学习代码和避免错误非常有价值,尤其适用于需要复杂数据预处理的工作流。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 MikannseのSekai!
评论
ValineDisqus
