本教程是ML系列的一部分。 在此步骤中,您将了解如何以及为何使用管道清理建模代码。
What Are Pipelines
管道是保持数据处理和建模代码有序的简单方法。 具体来说,管道捆绑了预处理和建模步骤,因此您可以像使用单个包一样使用整个捆绑包。
许多数据科学家在没有管道的情况下将模型混合在一起,但是管道有一些重要的好处。 其中包括:
- 清洁代码:您无需在每个处理步骤中跟踪您的训练(和验证)数据。 在每个处理步骤中计算数据会变得混乱。 使用管道,您无需手动跟踪每个步骤。
- 更少的错误:错误应用或忘记预处理步骤的机会较少。
- 更容易生产:将模型从原型转换为可大规模部署的设备可能会非常困难。 我们不会在这里讨论许多相关问题,但管道可以提供帮助。
- 更多模型测试选项:您将在下一个教程中看到一个示例,其中包含交叉验证。
Examples
我们不再介绍如何加载数据,现在想下一下,你已经有了训练和测试数据。
【1】
import pandas as pd
from sklearn.model_selection import train_test_split
# Read Data
data = pd.read_csv('../input/melb_data.csv')
cols_to_use = ['Rooms', 'Distance', 'Landsize', 'BuildingArea', 'YearBuilt']
X = data[cols_to_use]
y = data.Price
train_X, test_X, train_y, test_y = train_test_split(X, y)
您有一个使用Imputer填充缺失值的建模过程,然后使用RandomForestRegressor进行预测。 这些可以与make_pipeline函数捆绑在一起,如下所示。
【2】
from sklearn.ensemble import RandomForestRegressor
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import Imputer
my_pipeline = make_pipeline(Imputer(), RandomForestRegressor())
您现在可以使用此管道作为融合整体来拟合和预测。
【3】
my_pipeline.fit(train_X, train_y)
predictions = my_pipeline.predict(test_X)
进行比较,这里有一个不使用管道的例子:
【4】
my_imputer = Imputer()
my_model = RandomForestRegressor()
imputed_train_X = my_imputer.fit_transform(train_X)
imputed_test_X = my_imputer.transform(test_X)
my_model.fit(imputed_train_X, train_y)
predictions = my_model.predict(imputed_test_X)
这个特殊的管道只是代码优雅的一个小小改进。 但随着数据处理变得越来越复杂,管道变得越来越有价值。
Understanding Pipelines
大多数scikit-learn对象都是b或模型变形金刚。
变形金刚用于建模前的预处理。 Imputer类(用于填充缺失值)是变形金刚的示例。随着时间的推移,您将学习更多变形金刚,并且您将经常使用多个变形金刚。
模型用于进行预测。在将数据放入模型之前,通常会对数据进行预处理。
您可以根据应用方式判断对象是变形金刚还是模型。安装变形金刚后,使用transform命令应用它。在拟合模型后,将其与predict命令一起应用。您的管道必须从变形金刚步骤开始,并以模型结束。无论如何,这是你想要的。
最终,您将需要应用更多变形金刚并更灵活地组合它们。我们稍后将在高级管道教程中介绍此内容。
Your Turn
获取建模代码并将其转换为使用管道。现在,您需要对管道外的分类变量进行one-hot encoding(即在将数据放入管道之前)。