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

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

在构建和部署机器学习模型时,最佳好的方法是使它们尽可能的成为端到端的工作,这意味着尝试将大多数与模型相关的数据转换分组到一个对象中。

在ML世界中,采用pipeline的最简单方法是使用Scikit-learn。如果你不太了解它们,这篇文章就是为你准备的。我将通过一个简单的用例,首先尝试通过采用一个简单的机器学习工作流来解决这个问题,然后我将通过使用Scikit-Learn pipeline来解决这个问题,这样就能看出差异。

pipeline

pipeline允许你封装所有的预处理步骤,特性选择,扩展,特性编码,最重要的是它帮助我们防止数据泄漏,主要的好处是:

方便和封装:您只需要对数据调用fit和预测一次,就可以拟合整个估计序列。

联合参数选择:可以一次对pipeline中所有估计器的参数进行网格搜索。

在交叉验证中,安全pipeline有助于避免将测试数据中的统计信息泄漏到训练好的模型中

下面Scikit-learn pipelines流程图

640.png

一个转换序列(预处理,特征工程),和一个单一实体组装和执行的估计器(ML模型等)组成了pipelines。

转换对象(Transformers )是包含 FIT 和TRANSFORM方法的对象,例如one-hot encoder, simple imputer,等

估计器对象(Estimator )具有FIT和PREDICT方法的对象:(比如回归模型和分类模型等)

注意:在上面我已经连续放置了多个Transformers ,但它们不必这样设置,根据您的需要,您可以并行地实现它们。(你会在下面的例子中看到更多)

本例数据说明

我将使用来自Kaggle的数据集:Telco-Customer-Churn practice problem.

#ImportingtheDependenciesimportpandasaspdfromsklearn.model_selectionimporttrain_test_splitimportnumpyasnpimportwarningswarnings.filterwarnings('ignore')
df=pd.read_csv("/kaggle/input/telco-customer-churn/WA_Fn-UseC_-Telco-Customer-Churn.csv")
df

640.png

查看特征和数据类型

df.dtypes

640.png

#DefiningDependentVariablesX=df.drop(columns=   ['Churn','customerID','gender','PhoneService',
'MultipleLines', 'PaperlessBilling','PaymentMethod'], axis=1)
#IndependentVariabley=df['Churn']
#Convertingthisvariabletoobject, itisdeifinedasint64df['SeniorCitizen']=df['SeniorCitizen'].astype(object)

640.png

我们将专注于获得一个可行的模型,而不是专注于如何针对用例提出最佳模型。这里没有做任何EDA,而只是考虑不需要任何预处理的功能。

#SplitTrainTestX_train, X_test, y_train, y_test=train_test_split(X, y, test_size=0.30, random_state=124)
#NumericFeaturenumeric_features= ['tenure']
#CategoricalFeaturescategorical_features= ['SeniorCitizen', 'Partner', 'Dependents', 'PhoneService',
'InternetService','OnlineSecurity','OnlineBackup',
'DeviceProtection','TechSupport','StreamingTV',
'StreamingMovies','Contract']

这里作为演示仅将准确性作为测试指标。

方案1:不使用pipeline的用例(典型ML工作流程)

#ImportingtheDependenciesfromsklearn.imputeimportSimpleImputerfromsklearn.preprocessingimportStandardScaler, OneHotEncoderfromsklearn.linear_modelimportLogisticRegression

在下面的第一个解决方案中,我将实现一个典型的机器学习工作流程,首先从定义转换对象开始,然后将这些对象拟合(FIT)到训练数据中(从数据中学习),然后应用这些转换 (TRANSFORM)功能训练数据 接下来,我们在转换后的数据上训练模型,现在我们将所有这些转换再一次应用于测试集。这里我们不应用任何FIT(因为它不必从数据中学习),我们仅应用TRANSFORM函数来防止数据的泄露

对训练数据使用“fit & transform”

在测试/新数据上使用“transform”。这样可以防止数据泄漏并将相同的转换应用于这两组数据。

640.png

得到结果如下

目录
相关文章
|
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+模型训练
下一篇
无影云桌面