机器学习tip:sklearn中的pipeline

文章目录

  • [1 加载数据集](#1 加载数据集)
  • [2 构思算法的流程](#2 构思算法的流程)
  • [3 Pipeline执行流程的分析](#3 Pipeline执行流程的分析)
  • Reference
  • Statement

一个典型的机器学习构建包含若干个过程

  1. 源数据ETL
  2. 数据预处理
  3. 特征选取
  4. 模型训练与验证

一个典型的机器学习构建包含若干个过程

以上四个步骤可以抽象为一个包括多个步骤的流水线式工作,从数据收集开始至输出我们需要的最终结果。因此,对以上多个步骤、进行抽象建模,简化为流水线式工作流程则存在着可行性,对利用spark进行机器学习的用户来说,流水线式机器学习比单个步骤独立建模更加高效、易用。

管道机制在机器学习算法中得以应用的根源在于,参数集在新数据集(比如测试集)上的重复使用。

管道机制实现了对全部步骤的流式化封装和管理(streaming workflows with pipelines)。注意:管道机制更像是编程技巧的创新,而非算法的创新。

接下来我们以一个具体的例子来演示sklearn库中强大的Pipeline用法:

1 加载数据集

python 复制代码
import pandas as pd
from sklearn.cross_validation import train_test_split
from sklearn.preprocessing import LabelEncoder
 
df = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/'
                 'breast-cancer-wisconsin/wdbc.data', header=None)
                                 # Breast Cancer Wisconsin dataset
 
X, y = df.values[:, 2:], df.values[:, 1]
                                # y为字符型标签
                                # 使用LabelEncoder类将其转换为0开始的数值型
encoder = LabelEncoder()
y = encoder.fit_transform(y)
                    >>> encoder.transform(['M', 'B'])
                    array([1, 0])
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.2, random_state=0)

2 构思算法的流程

可放在Pipeline中的步骤可能有:

  • 特征标准化是需要的,可作为第一个环节
  • 既然是分类器,classifier也是少不了的,自然是最后一个环节
  • 中间可加上比如数据降维(PCA)
python 复制代码
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.linear_model import LogisticRegression
 
from sklearn.pipeline import Pipeline
 
pipe_lr = Pipeline([('sc', StandardScaler()),
                    ('pca', PCA(n_components=2)),
                    ('clf', LogisticRegression(random_state=1))
                    ])
pipe_lr.fit(X_train, y_train)
print('Test accuracy: %.3f' % pipe_lr.score(X_test, y_test))
 
                # Test accuracy: 0.947

Pipeline对象接受二元tuple构成的list,每一个二元 tuple 中的第一个元素为 arbitrary identifier string,我们用以获取(access)Pipeline object 中的 individual elements,二元 tuple 中的第二个元素是 scikit-learn与之相适配的transformer 或者 estimator。

python 复制代码
Pipeline([('sc', StandardScaler()), ('pca', PCA(n_components=2)), ('clf', LogisticRegression(random_state=1))])

3 Pipeline执行流程的分析

Pipeline 的中间过程由scikit-learn相适配的转换器(transformer)构成,最后一步是一个estimator。比如上述的代码,StandardScaler和PCA transformer 构成intermediate steps,LogisticRegression 作为最终的estimator。

当我们执行 pipe_lr.fit(X_train, y_train)时,首先由StandardScaler在训练集上执行 fit 和 transform 方法,transformed后的数据又被传递给Pipeline对象的下一步,也即PCA()。和StandardScaler一样,PCA也是执行 fit 和 transform 方法,最终将转换后的数据传递给 LosigsticRegression。整个流程如下图所示:

Reference

https://blog.csdn.net/lanchunhui/article/details/50521648

Statement

本文未经系统测试和专业评审,欢迎在评论区反馈和讨论问题。

相关推荐
雨中飘荡的记忆2 小时前
额度又见底了?这个开源项目,给 AI 编程助手接上 61 家"加油站"
人工智能
天远Date Lab2 小时前
零信任架构实战:基于天远企业年报信息核验构建自动化商业保理财务与社保穿透评估网关
人工智能·架构·自动化
EnCi Zheng2 小时前
后端怎么把AI接口稳定安全低成本接进业务:超时重试、密钥隔离与成本熔断清单
人工智能·后端·安全·架构·api
loulanyue_2 小时前
给概率大模型套上确定性缰绳:GraphRAG、神经符号与知识超图重构可信AI底座——读陈华钧杨博等CNCC2026第十届知识图谱论坛实录
人工智能·rag
古法老登瞎折腾2 小时前
大数据智能运维实战(九):让 AI 查日志——找到异常,也保留上下文
java·大数据·运维·人工智能·spring ai·mcp
IT_陈寒2 小时前
刚解决一个 Java 并发问题,这坑踩得我怀疑人生
前端·人工智能·后端
Smoothcloud润云2 小时前
GPU远程纳管安全吗?最小权限、网络边界与日志审计实战
服务器·网络·人工智能·安全·gpu算力·gpu
AI源码3 小时前
AI在线问诊平台
人工智能
一只爱撸猫的程序猿3 小时前
当任何人都能生成一万行代码:什么变得稀缺
人工智能·后端·程序员
读完一本书3 小时前
AI 生成的图,为什么一眼就能看出是 AI?5 个破绽
人工智能·aigc