使用Scikit-Learn pipeline 减少ML项目的代码量并提高可读性(下)

简介: 使用Scikit-Learn pipeline 减少ML项目的代码量并提高可读性

640.png


方案2:采用Scikit-learn pipeline

现在,让我们尝试使用Scikit-learn pipeline执行相同的操作,我将进行相同的转换并应用相同的算法

建立pipeline的第一步是定义每个转换器。约定是为我们拥有的不同变量类型创建转换器。脚步:

1)数值转换器:创建一个数值转换器,该转换器首先估算所有缺失值。然后应用StandardScaler。

2)分类转换器:创建一个分类转换器,该转换器采用OneHotEncoder将分类值转换为整数(1/0)。

3)列转换器:ColumnTransformer用于将上述转换应用于数据帧中的正确列,我将它们传递给我,这是我在上一节中定义的数字和分类特征的两个列表。

4)使用Estimator(Classifier)进行流水线操作:在这里,我将Column Transformer与最终的Transformer进行流水线化,后者是Estimator(我选择Logistic回归作为二进制分类器)

640.png

得到结果如下

640.png

我们得到了相同的准确率。这里没有多次进行拟合和变换,我们使用转换器和最终估计器对整个pipeline进行了一次拟合,并且我们应用了计算分数的方法(score) 以获得模型的准确率。如果要可视化我们创建的pipeline,我们可以使用以下命令将其可视化。

fromsklearnimportset_configset_config(display='diagram')
pipeline

640.png

访问pipeline的元素

我们可以使用以下命令访问每个元素

pipeline.named_steps

640.png

pipeline.named_steps['transform_column'].transformers_[0]

640.png

pipeline.named_steps['transform_column'].transformers_[1]

640.png

方案2改进:采用Scikit-learn pipeline (最少代码)

在Scikit-learn中,还有两个以上的函数与我们在上述实现中使用的函数(Column Transformer和pipeline)相同:

  • *make_column Transformer*
  • *make_pipeline*

这两个函数允许我们简化到更少的代码,它们有什么不同?

实现结构与前面完全相同,唯一的区别是,我们只传递需要的对象,而不是在函数内部传递元组。正如您在下面看到的,我没有给(SimpleImputer、standardscaler和Onehotencoder)对象指定特定的名称,而是直接将它们输入到pipeline中。

640.png

我们没有对pipeline做任何结构上的改变。唯一的区别是解决方案2我们没有任何名称传递给对象,这可以看到可视化的pipeline(下图),我们可以看到,这两个pipeline我们默认为数值和分类处理创建命名pipeline1和2,而上面的实现我们选择设置pipeline的名称。

image.png

快速比较上述解决方案

方案1:标准的基本ML工作流

#Replacesmissingvaluesimputer=SimpleImputer(strategy="median")
#scalesthenumericalfeaturescaler=StandardScaler()
#one-hotthecategoricalfeaturesone_hot=OneHotEncoder(handle_unknown='ignore',sparse=False)
#Definetheclassifierlr=LogisticRegression()
#learn/train/fitfromthedataimputer.fit(X_train[numeric_features])
imputed=imputer.transform(X_train[numeric_features])
scaler.fit(imputed)
scaled=scaler.transform(imputed)
one_hot.fit(X_train[categorical_features])
cat=one_hot.transform(X_train[categorical_features])
#ConcatenatingthescaledandonehotmatrixesFinal_train=pd.DataFrame(np.concatenate((scaled, cat), axis=1))
lr.fit(Final_train, y_train)
#Predictonthetestset-usingthetrainedclassifier-stillneedtodothetransformationsX_test_filled=imputer.transform(X_test[numeric_features])
X_test_scaled=scaler.transform(X_test_filled)
X_test_one_hot=one_hot.transform(X_test[categorical_features])
X_test=pd.DataFrame(np.concatenate((X_test_scaled, X_test_one_hot), axis=1))
lr.score(X_test,y_test)

方案2:采用Scikit-learn pipeline

fromsklearn.pipelineimportpipelinefromsklearn.composeimportColumnTransformernumeric_transformer=pipeline(steps=[
                                     ('meanimputer',     SimpleImputer(strategy='mean')),
                                     ('stdscaler', StandardScaler())
                                     ])
categorical_transformer=pipeline(steps=[
                                         ('onehotenc', OneHotEncoder(handle_unknown='ignore'))
                                         ])
col_transformer=ColumnTransformer(transformers=[('numeric_processing',numeric_transformer,                                                                 numeric_features),
                                                    ('categorical_processing', categorical_transformer,                                                       categorical_features)
pipeline=pipeline([
                     ('transform_column', col_transformer),
                     ('logistics', LogisticRegression())
                    ])          
pipeline.fit(X_train, y_train)
pipeline.score(X_test, y_test)

方案2改进

fromsklearn.composeimportmake_column_transformerfromsklearn.pipelineimportmake_pipelinenumeric_transformer=make_pipeline((SimpleImputer(strategy='mean')),
                                    (StandardScaler()))
categorical_transformer=make_pipeline(OneHotEncoder(handle_unknown='ignore'))
col_transformer=make_column_transformer((numeric_transformer, numeric_features),
                                            (categorical_transformer, categorical_features))
pipeline=make_pipeline(col_transformer,LogisticRegression())
pipeline.fit(X_train, y_train)
pipeline.score(X_test, y_test)

通过查看以上代码片段,我们了解到如何在工作流程中采用pipeline,并得得到的更干净,维护良好的代码以及更少的代码行数:我们从大约30行代码减少到20行代码。

结论

在本文中,我尝试向您展示了pipeline的功能,特别是Scikit-learn库提供的pipeline的功能,一旦理解,后者将是非常通用且易于实现的。我开始使用Scikit-learnpipeline作为数据科学的最佳实践,

精通使用pipeline和更好的ML工作流并不需要太多的练习,但是一旦掌握了它,肯定会让您的生活更轻松。如果您已经了解它们并使用它们,那么我很高兴能刷新您的记忆和技能。谢谢阅读

目录
相关文章
|
28天前
|
机器学习/深度学习 数据采集 数据可视化
Python 数据分析:从零开始构建你的数据科学项目
【10月更文挑战第9天】Python 数据分析:从零开始构建你的数据科学项目
51 2
|
9天前
|
弹性计算 Linux iOS开发
Python 虚拟环境全解:轻松管理项目依赖
本文详细介绍了 Python 虚拟环境的概念、创建和使用方法,包括 `virtualenv` 和 `venv` 的使用,以及最佳实践和注意事项。通过虚拟环境,你可以轻松管理不同项目的依赖关系,避免版本冲突,提升开发效率。
|
9天前
|
机器学习/深度学习 数据采集 算法
Python机器学习:Scikit-learn库的高效使用技巧
【10月更文挑战第28天】Scikit-learn 是 Python 中最受欢迎的机器学习库之一,以其简洁的 API、丰富的算法和良好的文档支持而受到开发者喜爱。本文介绍了 Scikit-learn 的高效使用技巧,包括数据预处理(如使用 Pipeline 和 ColumnTransformer)、模型选择与评估(如交叉验证和 GridSearchCV)以及模型持久化(如使用 joblib)。通过这些技巧,你可以在机器学习项目中事半功倍。
19 3
|
14天前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
机器学习基础:使用Python和Scikit-learn入门
24 1
|
22天前
|
JSON 搜索推荐 API
Python的web框架有哪些?小项目比较推荐哪个?
【10月更文挑战第15天】Python的web框架有哪些?小项目比较推荐哪个?
43 1
|
25天前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
【10月更文挑战第12天】本文介绍了如何使用Python和Scikit-learn进行机器学习的基础知识和入门实践。首先概述了机器学习的基本概念,包括监督学习、无监督学习和强化学习。接着详细讲解了Python和Scikit-learn的安装、数据处理、模型训练和评估等步骤,并提供了代码示例。通过本文,读者可以掌握机器学习的基本流程,并为深入学习打下坚实基础。
18 1
|
27天前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
本文介绍了如何使用Python和Scikit-learn进行机器学习的基础知识和实践。首先概述了机器学习的基本概念,包括监督学习、无监督学习和强化学习。接着详细讲解了Python和Scikit-learn的安装、数据处理、模型选择与训练、模型评估及交叉验证等关键步骤。通过本文,初学者可以快速上手并掌握机器学习的基本技能。
47 2
|
27天前
|
机器学习/深度学习 数据挖掘 Serverless
手把手教你全面评估机器学习模型性能:从选择正确评价指标到使用Python与Scikit-learn进行实战演练的详细指南
【10月更文挑战第10天】评估机器学习模型性能是开发流程的关键,涉及准确性、可解释性、运行速度等多方面考量。不同任务(如分类、回归)采用不同评价指标,如准确率、F1分数、MSE等。示例代码展示了使用Scikit-learn库评估逻辑回归模型的过程,包括数据准备、模型训练、性能评估及交叉验证。
49 1
|
1月前
|
机器学习/深度学习 人工智能 数据挖掘
机器学习基础:使用Python和Scikit-learn入门
【10月更文挑战第6天】在人工智能领域,机器学习已成为核心技术。本文指导初学者使用Python与Scikit-learn入门机器学习,涵盖基本概念、环境搭建、数据处理、模型训练及评估等环节。Python因简洁性及其生态系统成为首选语言,而Scikit-learn则提供了丰富工具,简化数据挖掘与分析流程。通过实践示例,帮助读者快速掌握基础知识,为进一步深入研究奠定坚实基础。
23 4
|
28天前
|
机器学习/深度学习 人工智能 算法
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
玉米病害识别系统,本系统使用Python作为主要开发语言,通过收集了8种常见的玉米叶部病害图片数据集('矮花叶病', '健康', '灰斑病一般', '灰斑病严重', '锈病一般', '锈病严重', '叶斑病一般', '叶斑病严重'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。再使用Django搭建Web网页操作平台,实现用户上传一张玉米病害图片识别其名称。
50 0
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
下一篇
无影云桌面