网易首页 > 网易号 > 正文 申请入驻

Scikit-learn Pipeline完全指南:高效构建机器学习工作流

0
分享至

在机器学习工作流程中,组合估计器通过将多个转换器(Transformer)和预测器(Predictor)整合到一个管道(Pipeline)中,可以有效简化整个过程。这种方法不仅简化了数据预处理环节,还能确保处理过程的一致性,最大限度地降低数据泄露的风险。构建组合估计器最常用的工具是Scikit-learn提供的Pipeline类。

关键术语

估计器(Estimator)泛指任何实现了fit方法的对象,该方法可以从数据中学习参数。估计器的概念涵盖了模型、预处理器以及管道等多种类型。

转换器(Transformer)是一种特殊的估计器,主要用于数据预处理或特征工程。转换器同时实现了fit方法(从数据中学习转换规则)和transform方法(将学习到的转换规则应用到数据上)。常见的转换器包括缩放器(Scaler)、降维器(Dimensionality Reduction)、编码器(Encoder)等。

预测器(Predictor)是用于监督学习任务(如分类或回归)的一类估计器。预测器需要实现fit方法(用于在训练集上学习)和predict方法(用于在测试集上进行预测)。

管道(Pipeline)

管道(或者叫流水线)可以将多个估计器串联起来,形成一个完整的工作流程。在数据处理过程中通常需要遵循一系列固定的步骤,例如特征选择、数据归一化以及模型训练等,所以一般会用这种形式来串联我们的训练过程。

使用管道有以下几个主要目的:

  • 便捷性和封装性: 只需调用一次fit和predict方法,即可完成从数据预处理到模型训练的全部步骤。
  • 联合参数选择: 可以使用网格搜索等方法,一次性地对管道中所有估计器的超参数进行优化。
  • 避免数据泄露: 通过交叉验证等方式,管道可以有效防止在训练过程中发生数据泄露。

管道中除最后一个估计器以外,其余估计器都必须是转换器(即必须实现transform方法)。最后一个估计器可以是任意类型,包括转换器、分类器等。

构建管道

构建管道需要提供一个由(key, value)元组组成的列表,其中key是字符串类型,表示当前步骤的名称;value则是一个估计器对象。下面是一个构建管道的示例:

from sklearn.pipeline import Pipeline
from sklearn.linear_model import LogisticRegression
from sklearn.decomposition import PCA
pipeline = Pipeline([
('transformer_1', StandardScaler()),
('predictor', LogisticRegression())
])
pipeline

在上述示例中,我们首先使用StandardScaler对数据进行标准化处理,确保所有特征都经过适当的缩放。然后再将LogisticRegression模型作为预测器,对数据进行二分类。通过管道可以方便地对整个训练集进行拟合和预测,代码如下所示:

# 拟合管道
pipeline.fit(X_train, y_train)
# 管道预测
y_pred = pipeline.predict(X_test)

在拟合阶段,训练数据将依次通过管道中的各个转换器,依次完成拟合和转换操作。处理后的数据最终被用于训练预测模型。在预测阶段,管道会对测试数据应用与训练时相同的转换操作,再由预测器给出最终的预测结果。

网格搜索与交叉验证

手动调优超参数费时费力,而且往往难以取得理想的效果。这时就可以借助Scikit-learn提供的GridSearchCV类,自动化地搜索最优超参数组合。

from sklearn.model_selection import GridSearchCV
# 定义网格搜索参数
grid_params = {
'transformer_1__with_mean': [True, False],
'predictor__C': [0.1, 1, 10]
}
# 执行网格搜索
grid = GridSearchCV(pipeline, grid_params, cv=10)
grid.fit(X_train, y_train)

在grid_params字典中,指定了需要优化的超参数及其候选取值:

  • transformer_1__with_mean: 管道中transformer_1步骤的with_mean参数,取值为布尔类型。
  • predictor__C: 管道中predictor步骤的正则化强度C,取值为数值类型。
  • cv=10: 指定交叉验证的折数为10。

通过网格搜索可以找到模型在当前数据集上的最优超参数组合。这个过程可以确保管道在性能上得到充分优化。

保存和加载管道

一旦通过GridSearchCV完成了管道的训练和优化,就可以将其保存起来,供日后使用。下面的代码展示了如何保存和加载一个已经训练好的管道:

import joblib
# 保存管道
joblib.dump(pipeline, 'pipeline.pkl')
# 加载管道
loaded_pipeline = joblib.load('pipeline.pkl')

这一功能在实际生产环境中尤为重要。通过保存训练好的管道可以直接将其部署到线上系统,用于对新数据进行实时预测,而无需重新训练模型。

为什么要保存管道?

保存管道有以下几个主要原因:

  • 复用性: 避免了每次使用都需要重新训练模型和执行数据预处理的繁琐步骤。
  • 一致性: 确保对不同数据集应用相同的转换操作和模型,提高结果的可重复性。
  • 部署便捷: 将管道整体保存为一个对象,可以方便地集成到生产系统中,实现实时预测。
  • 时间效率: 对于复杂的管道或大规模数据集,重用已训练的管道可以显著节省计算时间。

完整示例代码

下面的代码展示了如何使用Scikit-learn管道完成端到端的机器学习流程:

  1. 定义包含数据转换和模型的管道;
  2. 使用GridSearchCV搜索最优超参数,并拟合管道;
  3. 使用训练好的管道对测试集进行预测。

from sklearn.pipeline import Pipeline
from sklearn.linear_model import LogisticRegression
from sklearn.decomposition import PCA
from sklearn.model_selection import GridSearchCV
# 创建管道
pipeline = Pipeline([
('transformer_1', StandardScaler()),
('predictor', LogisticRegression())
])
# 定义网格搜索参数
grid_params = {
'transformer_1__with_mean': [True, False],
'predictor__C': [0.1, 1, 10]
}
# 执行网格搜索
grid = GridSearchCV(pipeline, grid_params, cv=10)
grid.fit(X_train, y_train)
# 使用管道进行预测
y_pred = pipeline.predict(X_test)

总结

Scikit-learn管道是构建高效、鲁棒、可复用的机器学习工作流程的利器。通过掌握管道的使用,我们可以轻松地完成从数据预处理到模型训练、评估和部署的全流程,极大地提高工作效率。建议在实际项目中多多尝试和运用管道,以期进一步优化您的机器学习流程。

https://mp.weixin.qq.com/cgi-bin/home?t=home/index&token=433890165&lang=zh_CN

Mohammed Shammeer

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
足坛各位置进球最多球员盘点(433阵型)

足坛各位置进球最多球员盘点(433阵型)

K唐伯虎
2026-08-25 07:57:02
7年英超生涯落幕?曝25岁巴西国脚登陆沙特 阿森纳接受5500万镑报价

7年英超生涯落幕?曝25岁巴西国脚登陆沙特 阿森纳接受5500万镑报价

我爱英超
2026-08-24 22:27:52
台风接力来袭!“四旋共舞”海上扎堆,“沙德尔”将于27-28日登陆闽浙沿海,暴雨、大暴雨、台风,要来了

台风接力来袭!“四旋共舞”海上扎堆,“沙德尔”将于27-28日登陆闽浙沿海,暴雨、大暴雨、台风,要来了

每日经济新闻
2026-08-25 01:16:04
iPhone买对不买贵,目前“适合捡漏”的4款苹果手机,用5年不用换

iPhone买对不买贵,目前“适合捡漏”的4款苹果手机,用5年不用换

小兔子发现大事情
2026-08-23 06:37:20
烟草系统拉响警报:再这样下去,中国烟草真要出大问题

烟草系统拉响警报:再这样下去,中国烟草真要出大问题

三农老历
2026-08-24 10:09:24
难以置信!网友扒出来曹小姐初中没完成,14岁就生了一个儿子,如今都18岁了

难以置信!网友扒出来曹小姐初中没完成,14岁就生了一个儿子,如今都18岁了

火山詩话
2026-08-09 06:37:39
5名混血,日本U18男篮为何只拿到第5名?

5名混血,日本U18男篮为何只拿到第5名?

林子说事
2026-08-24 10:41:07
看了孙骁骁家世才明白,为何已经财富自由的任重,甘愿当上门女婿

看了孙骁骁家世才明白,为何已经财富自由的任重,甘愿当上门女婿

林雁飞
2026-08-23 21:59:58
74人被扣,以色列发动空袭,土耳其不忍了,内塔尼亚胡要倒大霉?

74人被扣,以色列发动空袭,土耳其不忍了,内塔尼亚胡要倒大霉?

影孖看世界
2026-08-22 22:23:40
五百名医生已证实:维生素B12与甲钴胺的真相,最好花点时间看看

五百名医生已证实:维生素B12与甲钴胺的真相,最好花点时间看看

路医生健康科普
2026-08-03 15:25:14
老人因“鱼头对自己”怒斥小辈,被怼到哑口无言:没生在紫禁城,就别那么多穷规矩!

老人因“鱼头对自己”怒斥小辈,被怼到哑口无言:没生在紫禁城,就别那么多穷规矩!

妍妍教育日记
2026-08-16 10:05:09
19岁,8球6助,180万身价!深圳走出的天才,把球踢向了深圳球迷

19岁,8球6助,180万身价!深圳走出的天才,把球踢向了深圳球迷

曹老师评球
2026-08-24 08:45:16
CBA宣布重要决定,球迷怒喷,又成为笑话,强烈呼吁姚明回归

CBA宣布重要决定,球迷怒喷,又成为笑话,强烈呼吁姚明回归

宗介说体育
2026-08-24 14:02:31
广西农民采药迷路,意外发现美军52年前机密,美总统亲自写信道谢

广西农民采药迷路,意外发现美军52年前机密,美总统亲自写信道谢

芊芊子吟
2026-08-24 20:35:08
章子怡套现3亿上热搜,不到24小时,恶心的一幕出现,质疑声出现:“别让她跑了?”

章子怡套现3亿上热搜,不到24小时,恶心的一幕出现,质疑声出现:“别让她跑了?”

LULU生活家
2026-08-24 19:44:57
联大主席想剥夺五常权力,美俄枪抵脑门,各方胆寒,全等中国态度

联大主席想剥夺五常权力,美俄枪抵脑门,各方胆寒,全等中国态度

书写传奇
2026-08-23 20:09:40
“甲醛白菜”屡禁不止:十余年间被多次曝光,甲醛为何仍未纳入蔬菜常规检测?

“甲醛白菜”屡禁不止:十余年间被多次曝光,甲醛为何仍未纳入蔬菜常规检测?

澎湃新闻
2026-08-25 07:14:28
杭州妈妈骑车带孩子,电话手表不慎掉落途中,手表不断发回位置,还自动拍到两张陌生人的正脸

杭州妈妈骑车带孩子,电话手表不慎掉落途中,手表不断发回位置,还自动拍到两张陌生人的正脸

都市快报橙柿互动
2026-08-24 00:32:23
孩子说“再玩10分钟”,父母的第一反应,正在改写他以后的人生

孩子说“再玩10分钟”,父母的第一反应,正在改写他以后的人生

枕边聊育儿
2026-08-21 11:43:52
中央气象台:台风“沙德尔”将于27日至28日登陆闽浙沿海

中央气象台:台风“沙德尔”将于27日至28日登陆闽浙沿海

新京报
2026-08-24 17:03:14
2026-08-25 08:20:49
deephub incentive-icons
deephub
CV NLP和数据挖掘知识
2028文章数 1465关注度
往期回顾 全部

科技要闻

何小鹏:小鹏机器人年底量产 2027年上市

头条要闻

越南为连接中越的铁路增加投资200多亿 调整内容披露

头条要闻

越南为连接中越的铁路增加投资200多亿 调整内容披露

体育要闻

42张照片 珍藏世界杯的热辣滚烫

娱乐要闻

韩沛颖开撕《主角》剧组引发全网热议

财经要闻

宇树IPO:追高、被套,多久能回血?

汽车要闻

复古配色/镜面轮毂 全新QQ3 摩登版发布

态度原创

旅游
手机
时尚
教育
家居

旅游要闻

江苏苏州:拙政园迎来暑期旅游高峰

手机要闻

苹果听取用户反馈,放弃iCloud+“隐藏邮件地址”域名变更计划

伊姐周日热推:电视剧《花开锦绣》;电视剧《师兄太稳健》......

教育要闻

高考前夕的决胜策略:从知识巩固到心理调适的全方位指导

家居要闻

2026建博会(广州) 公装联探展交流活动

无障碍浏览 进入关怀版