如何搭建一个简单的机器学习流水线?

阅读此分步教程,学会通过导入scikit-learn包来搭建一个简单的机器学习流水线(pipeline)

一个机器学习模型中,有很多可移动的组件需要被组合在一起,模型才能被执行并成功的得到结果。把机器学习过程的各个部分结合在一起的过程就被称作一条pipeline(管道,流水线)。

Pipeline是一个很笼统广义的概念,但对于数据科学家来说却尤为重要。在软件工程领域,人们通过建立pipeline来开发软件,并且从源代码到软件发布都遵循该流程。

同样的,在机器学习中,构建pipeline,使数据沿pipeline“流动”,从原始格式,最终得到有用的信息。这使我们能够建立多种机器学习方法并行的pipeline系统,从而来比较各种方法的性能。

Pipeline的每一步输入的数据,都是经过前一步处理过的,也就是某一数据处理单元的输出,是下一步的输入。

数据在pipeline中流动,就像水在水管中流动。精通pipeline思想,能让我们有效的创建一个无差错的机器学习模型,另外,pipeline也是自动化机器学习系统中非常重要的组成部分。

一条简单的pipeline

我们首先导入一个名为 Iris 的数据集,该数据集可以在 scikit-learn 的简单数据集库中找到(http://scikit-learn.org/stable/auto_examples/datasets/plot_iris_dataset.html)。

该数据集包含 4 个特征和 150 条数据。我们会用以下几步来构建pipeline,并使用Iris数据集, 来训练我们的模型。对于该数据集,我们考虑的问题是:用四个特征来预测一个给定的 Iris 数据的种类,如图一所示的流程图。

在该pipeline中,我们使用 MinMaxScaler 方法对输入数据进行预处理,用 logistic 回归方法来预测 Iris 的种类。然后,根据准确性来评估模型:

1.第一步是从 scikit-learn 中导入所需的包,这些包提供很多函数来帮助我们完成该任务。我们必须从 sklearn.pipline 中添加 pipline 方法,该方法会提供一些建立机器学习pipeline的一些必要方法:

from sklearn.datasets import load_irisfrom sklearn.preprocessing import MinMaxScalerfromsklearn.linear_modelimportLogisticRegressionfromsklearn.model_selectionimporttrain_test_splitfrom sklearn.pipeline import Pipeline

2.接下来导入 Iris 数据集,并将其分为训练和测试集两部分。在本次示例中,我们用原数据集的80%来训练模型,保留20%的数据来测试模型的准确率。我们能用 shape 函数来查看数据集的维度信息:

# Load and split the datairis = load_iris()X_train, X_test, y_train,y_test= train_test_split(iris.data,iris.target,test_size= .2,)X_train.shape

3.结果显示训练集有4列和120行,符合 Iris 数据集 80% 的比例,结果如下:

4.接下来,我们输出该数据集:

print(X_train)

以下是译者运行代码得到的结果:

[[5.1 3.8 1.5 0.3][7.7 3. 6.1 2.3][6.7 3.1 5.6 2.4][5.9 3. 4.2 1.5][6.3 2.5 4.9 1.5][6.3 3.4 5.6 2.4][6.8 3.2 5.9 2.3][4.8 3. 1.4 0.3][6.7 3. 5. 1.7]......

5.下一步是创建一个 pipeline 对象,该对象的格式是 (key , value) 对。Key 包含每一步的名字,用字符串表示;value 是函数名或者实际的方法名称。下面的代码片段中,我们将 MinMaxScaler() 方法命名为 minmax,LogisticRegression() 方法命名为 lr:

pipe_lr = Pipeline([('minmax', MinMaxScaler()),('lr'LogisticRegression())])

6.然后,我们将 pipeline对象 pipe_lr 在训练集上进行拟合:

pipe_lr.fit(X_train, y_train)

7.执行完上述代码后,你会得到下面的输出,该输出展示了拟合后的模型的最终结构:

8.最后一步是用评价函数在测试集上对模型进行评分:

score = pipe_lr.score(X_test, y_test)print('Logistic Regression pipeline test accuracy: %.3f' % score)

如下图所示,模型的准确率是 0.867,也即 86.7%。

(译注:该准确率和数据集的划分有关系,每次运行,数据集的随机划分不同,准确率也不同)

在该示例中,我们创建了一个包含 minmax 标准化和 Logistic 回归两步的pipeline。当我们在 pipe_lr 上进行拟合时,MinMaxScaler 对输入数据执行了 fit 和 transform 方法,然后数据流向预测函数, logistic回归函数。pipeline中的这些中间步骤被称为transformers,而最后一步被称作estimator

翻译:Philip审校:Leo编辑:孟婕

关注集智AI学园公众号

获取更多更有趣的AI教程吧!

搜索微信公众号:swarmAI

集智AI学园QQ群:426390994

学园网站:campus.swarma.org

商务合作|zhangqian@swarma.org

投稿转载|wangjiannan@swarma.org

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180603G1BP5600?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券