在使用sklean处理一个机器学习实例时,可能会通过数据缩放、特征合并以及模型学习拟合等过程;而且,当问题更为复杂时,所应用到的算法以及模型则较为繁杂。算法
与此同时,通过实践发现,在忽略一些细节的前提下,能够经过将这些数据处理步骤结合成一条算法链,以更加高效地完成整个机器学习流程;由此,管道(pipeline)概念与机制应运而生。机器学习
所谓管道,即由一系列数据转换步骤或待拟合模型(若是有,则模型必须处于管道末端)构成的加工链条。
下面以实例释之:学习
可能有同窗指出,管道只是能简化代码,但也不是缺其不可。实际上,管道的做用不只在于简化代码,更在于一些关键的数据转换步骤须要管道机制加持,好比交叉验证。测试
看下图,是使用传统处理流程进行交叉验证的图示;
能够看到,在图的上半部分表示交叉验证区域中,进行数据缩放处理时,同时用到了训练数据与验证数据,可是这是不符合要求的;
即便是验证数据的缩放,也要使用经训练数据拟合事后的MinMaxScaler(),而验证数据自己不该该参与到MinMaxScaler()拟合中,这样会泄露验证数据包含的信息,从而致使验证结果偏离实际。
blog
因此,符合要求的交叉验证图示应相似于下图
ip
若是要手动实现上述划分是异常麻烦的,由于须要人工干预每一次的交叉验证操做;但若是用到pipeline,则实现的代码很是简洁,只不过把网格搜索的估计器置换成构建的管道(pipe),部分关键代码以下图:
it