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

机器学习中令你事半功倍的pipeline处理机制

0
分享至


文末赠书福利 why Pipeline?

你有没有遇到过这种情况:在机器学习项目中,对训练集的各种数据预处理操作,比如:特征提取、标准化、主成分分析等,在测试集上要重复使用这些参数。

为了避免重复操作,这里就要用到机器学习中的pipeline机制

按照sklearn官网的解释 pipeline 有以下妙用:

1、便捷性和封装性:直接调用fit和predict方法来对pipeline中的所有算法模型进行训练和预测。

2、联合的参数选择:你可以一次grid search管道中所有评估器的参数。

3、安全性:训练转换器和预测器使用的是相同样本,管道有助于防止来自测试数据的统计数据泄露到交叉验证的训练模型中。

下面我们开始一起学习一下~~

Pipeline的原理

pipeline可以将许多算法模型串联起来,形成一个典型的机器学习问题工作流。

Pipeline处理机制就像是把所有模型塞到一个管子里,然后依次对数据进行处理,得到最终的分类结果,

例如模型1可以是一个数据标准化处理,模型2可以是特征选择模型或者特征提取模型,模型3可以是一个分类器或者预测模型(模型不一定非要三个,根据自己实际需要)。

Pipleline中最后一个之外的所有评估器都必须是变换器,最后一个评估器可以是任意类型(transformer,classifier,regresser),若最后一个评估器是分类器,则整个pipeline就可以作为分类器使用,如果最后一个estimator是个回归器,则整个pipeline就可以作为回归器使用。

注:

Estimator:估计器,所有的机器学习算法模型,都被称为估计器。

Transformer:转换器,比如标准化。转换器的输出可以放入另一个转换器或估计器中作为输入。

一个完整的Pipeline步骤举例:

1.首先对数据进行预处理,比如缺失值的处理

2.数据的标准化

3.降维

4.特征选择算法

5.分类或者预测或者聚类算法(估计器,estimator)

实际上,调用pipeline的fit方法,是用前n-1个变换器处理特征,之后传递给最后的estimator训练。pipeline继承最后一个estimator的所有方法。

Pipeline的用法

调用方法:

sklearn.pipeline.Pipeline(steps, memory=None, verbose=False)

参数详解:

steps : 步骤:使用(key, value)列表来构建,其中 key 是你给这个步骤起的名字, value 是一个评估器对象。

memory:内存参数,默认None

Pipeline的function

Pipline的方法都是执行各个学习器中对应的方法,如果该学习器没有该方法,会报错。假设该Pipline共有n个学习器:

transform:依次执行各个学习器的transform方法

fit:依次对前n-1个学习器执行fit和transform方法,第n个学习器(最后一个学习器)执行fit方法

predict:执行第n个学习器的predict方法

score:执行第n个学习器的score方法

set_params:设置第n个学习器的参数

get_param:获取第n个学习器的参数

Pipeline妙用:模块化Feature Transform

以鸢尾花数据集分类任务为例

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.decomposition import PCA
from sklearn.datasets import load_iris
iris=load_iris()
pipe=Pipeline([('sc', StandardScaler()),('pca',PCA()),('svc',SVC())])
#('sc', StandardScaler()) sc为自定义转换器名称,StandardScaler()为执行标准化任务的转换器
pipe.fit(iris.data,iris.target)

先用 StandardScaler 对数据集每一列做标准化处理(transformer)

再用 PCA 主成分分析进行特征降维(transformer)

最后再用 SVC 模型(Estimator)

输出结果:

Pipeline(memory=None,
steps=[('sc',
StandardScaler(copy=True, with_mean=True, with_std=True)),
('pca',
PCA(copy=True, iterated_power='auto', n_components=None,
random_state=None, svd_solver='auto', tol=0.0,
whiten=False)),
('svc',
SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,
decision_function_shape='ovr', degree=3,
gamma='auto_deprecated', kernel='rbf', max_iter=-1,
probability=False, random_state=None, shrinking=True,
tol=0.001, verbose=False))],
verbose=False)

训练得到的是一个模型,可直接用来预测,预测时,数据会从step1开始进行转换,避免了模型用来预测的数据还要额外写代码实现。还可通过pipe.score(X,Y)得到这个模型在X训练集上的正确率。

array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2])
Pipeline妙用:自动化 Grid Search

Pipeline可以结合GridSearch来对参数进行选择:

from sklearn.datasets import fetch_20newsgroups
import numpy as np
news = fetch_20newsgroups(subset='all')
from sklearn.cross_validation import train_test_split
X_train,X_test,y_train,y_test = train_test_split(news.data[:3000],news.target[:3000],test_size=0.25,random_state=33)
from sklearn.feature_extraction.text import TfidfVectorizer
vec = TfidfVectorizer()
X_count_train = vec.fit_transform(X_train)
X_count_test = vec.transform(X_test)
from sklearn.svm import SVC
from sklearn.pipeline import Pipeline
#使用pipeline简化系统搭建流程,将文本抽取与分类器模型串联起来
clf = Pipeline([
('vect',TfidfVectorizer(stop_words='english')),('svc',SVC())
])
# 注意,这里经pipeline进行特征处理、SVC模型训练之后,得到的直接就是训练好的分类器clf

parameters = {
'svc__gamma':np.logspace(-2,1,4),
'svc__C':np.logspace(-1,1,3),
'vect__analyzer':['word']
}

#n_jobs=-1代表使用计算机的全部CPU
from sklearn.grid_search import GridSearchCV
gs = GridSearchCV(clf,parameters,verbose=2,refit=True,cv=3,n_jobs=-1)

gs.fit(X_train,y_train)
print (gs.best_params_,gs.best_score_)
print (gs.score(X_test,y_test))

输出

{'svc__C': 10.0, 'svc__gamma': 0.1, 'vect__analyzer': 'word'} 0.7906666666666666
0.8226666666666667
Pipeline其他用法

Pipeline 还有一些其他用法,这里只简单介绍最最常用的两个make_pipeline

pipeline.make_pipeline(\*steps, \*\*kwargs)

make_pipeline函数是Pipeline类的简单实现,只需传入每个step的类实例即可,不需自己命名,自动将类的小写设为该step的名。

make_pipeline(StandardScaler(),GaussianNB())

输出

Pipeline(steps=[('standardscaler', StandardScaler(copy=True, with_mean=
True, with_std=True)), ('gaussiannb', GaussianNB(priors=None))])
p=make_pipeline(StandardScaler(),GaussianNB())
p.steps

输出

[('standardscaler', StandardScaler(copy=True, with_mean=True, with_std=True)),
('gaussiannb', GaussianNB(priors=None))]

FeatureUnion

pipeline.FeatureUnion(transformer_list[, …])

FeatureUnion,同样通过(key,value)对来设置,通过set_params设置参数。不同的是,每一个step分开计算,FeatureUnion最后将它们计算得到的结果合并到一块,返回的是一个数组,不具备最后一个estimator的方法。有些数据需要标准化,或者取对数,或onehot编码最后形成多个特征项,再选择重要特征,这时候FeatureUnion非常管用。

from sklearn.pipeline import FeatureUnion
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import FunctionTransformer
from numpy import log1p

step1=('Standar',StandardScaler())
step2=('ToLog',FunctionTransformer(log1p))
steps=FeatureUnion(transformer_list=[step1,step2])

steps.fit_transform(iris.data)
data=steps.fit_transform(iris.data)

大家可以运行看看结果

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

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.

相关推荐
热点推荐
陈光标赠张雪劳斯莱斯骑虎难下,想私了热度太高,二手车商已盯上

陈光标赠张雪劳斯莱斯骑虎难下,想私了热度太高,二手车商已盯上

小怪吃美食
2026-04-03 04:56:08
男子同意砸破车窗取AED救人,婉拒对方2000元酬谢:设备已放置两年,本不希望用到

男子同意砸破车窗取AED救人,婉拒对方2000元酬谢:设备已放置两年,本不希望用到

环球网资讯
2026-04-02 17:30:24
暴雷的网红保健品有后续了,回应硬刚央视!与辉同行曾帮卖上千万

暴雷的网红保健品有后续了,回应硬刚央视!与辉同行曾帮卖上千万

柴狗夫斯基
2026-04-02 10:46:24
原来张琳芃妻子是她,全力护夫生俩娃,难怪丈夫能拿11个中超冠军

原来张琳芃妻子是她,全力护夫生俩娃,难怪丈夫能拿11个中超冠军

寒士之言本尊
2026-04-02 16:22:50
全球40多个国家讨论对伊朗实施制裁

全球40多个国家讨论对伊朗实施制裁

一种观点
2026-04-03 08:25:06
iPhone 半价换电池翻车,网友直呼被苹果骗了!

iPhone 半价换电池翻车,网友直呼被苹果骗了!

新浪财经
2026-04-02 11:40:44
中国人月薪过万很普遍了吗?

中国人月薪过万很普遍了吗?

黯泉
2026-03-03 22:15:45
73岁大爷为43岁妻子做阴茎假体手术,网友破防了:这才是真爱

73岁大爷为43岁妻子做阴茎假体手术,网友破防了:这才是真爱

魔都姐姐杂谈
2026-04-02 18:52:46
25分惨败被淘汰!女篮争冠热门无缘四强:张子宇又一次被弃用了?

25分惨败被淘汰!女篮争冠热门无缘四强:张子宇又一次被弃用了?

篮球快餐车
2026-04-03 00:06:51
年仅18却疯狂捞金,单依纯家境被曝光后,才知道她为何着急赚钱!

年仅18却疯狂捞金,单依纯家境被曝光后,才知道她为何着急赚钱!

天天热点见闻
2026-03-31 12:39:20
1982年血色使馆:中国外交官唐健生为了生存杀光了所有同事

1982年血色使馆:中国外交官唐健生为了生存杀光了所有同事

阿校谈史
2026-03-20 11:03:27
丧心病狂!邯郸中学校长性侵15岁女生,拿20万封口,势力大也没用

丧心病狂!邯郸中学校长性侵15岁女生,拿20万封口,势力大也没用

观察鉴娱
2026-04-02 10:26:05
泪目!全红婵哽咽揭秘体重增加:每天只吃1顿,接受不了这么胖

泪目!全红婵哽咽揭秘体重增加:每天只吃1顿,接受不了这么胖

李喜林篮球绝杀
2026-03-30 11:48:54
男生不愿娶的女生职业排行:第1名看似可怕,但男人最怕的是第3名

男生不愿娶的女生职业排行:第1名看似可怕,但男人最怕的是第3名

品读时刻
2026-03-31 09:10:58
李文基被查!珠海国资委三任主任接连“落马”

李文基被查!珠海国资委三任主任接连“落马”

南方都市报
2026-04-02 20:39:05
排队一个半小时仍无法进入景区,游客大喊“退票”!湖州龙之梦景区回应

排队一个半小时仍无法进入景区,游客大喊“退票”!湖州龙之梦景区回应

齐鲁壹点
2026-04-02 19:13:29
伊朗称美以对伊朗能力一无所知 将战至“敌人悔恨不已并投降”

伊朗称美以对伊朗能力一无所知 将战至“敌人悔恨不已并投降”

新京报
2026-04-02 14:18:12
2026款小鹏MONA M03发布,售价11.98万元起

2026款小鹏MONA M03发布,售价11.98万元起

新浪财经
2026-04-02 22:38:01
江苏高速:临时关闭20个收费站!

江苏高速:临时关闭20个收费站!

我爱赣榆
2026-04-02 20:40:26
银行不会直说的潜规则:存款满50万,你就有资格提条件

银行不会直说的潜规则:存款满50万,你就有资格提条件

王二哥老搞笑
2026-04-03 01:16:36
2026-04-03 09:16:49
Ai学习的老章 incentive-icons
Ai学习的老章
Ai学习的老章
3303文章数 11122关注度
往期回顾 全部

科技要闻

战火烧向科技公司!亚马逊中东云计算中心遭袭

头条要闻

被中国外交部揭底的日本极右翼分子身份披露

头条要闻

被中国外交部揭底的日本极右翼分子身份披露

体育要闻

邵佳一的改革,从让每个人踢舒服开始

娱乐要闻

《浪姐》人气榜出炉!曾沛慈断层第一

财经要闻

全球石油危机或将蔓延

汽车要闻

轴距2米7/后排能跷腿 试驾后驱小车QQ3 EV

态度原创

教育
游戏
时尚
旅游
手机

教育要闻

春假不“躺平”!乡村学生专属“安全+快乐”双保障,解锁春日成长新方式

《生化危机9》新Mod 格蕾丝穿谢娃比基尼服装

为什么“这个颜色”成为今年顶流?这样穿好看又治愈

旅游要闻

深圳一网红公园紧急闭园!一度大批游客涌入,官方:整改15天

手机要闻

价格压不住了!骁龙8E6成本大涨:迭代旗舰起步价超5000元

无障碍浏览 进入关怀版