《Python机器学习基础教程 》笔记-第6章

github地址:点我

在网格搜索中使用管道

pipeline组合了2个步骤(1个预处理+1个分类模型),首先对训练数据做MinMaxScaler的fit_transform,然后再调用SVC模型的fit进行训练。

这里采用5折网格参数搜索,但是在pipeline情况下,需要把搜索参数增加对应步骤的名字作为前缀,这样才会被pipeline中的某个步骤使用。

通用的管道接口

pipeline每个步骤都要求有fit方法,并且除了最后一个步骤之外都额外需要拥有transform方法以便对数据输入进行转换。

K折网格搜索是为了找到表现最好的一次pipeline,它保存在gridsearch的bestestimator中,可以取出其中的每一个步骤的训练结果。

可以看到具有最佳泛化的pipeline,其2个步骤的训练结果也对应的保存了起来,我们可以取出其中的某一步骤的训练结果。

网格搜索+预处理步骤

这依旧是pipeline的一个例子,在中间加了一个交互多项式特征的步骤。

可以看出2次多项式的精度表现最好。

通过pipeline同时搜索预处理参数与模型的参数的确非常强大,但是网格搜索的参数越多代价越高。

网格搜索+模型选择

刚才都是搜索模型的参数,我们有时候想比较哪个模型更好,或者使用/不使用预处理哪个更好,那么就可以利用pipeline+网格搜索实现。

通过在网格搜索中指定步骤的名字,可以进行模型的替换,从而验证哪种模型泛化更好,在此同时也可以进行模型调参。

上述搜索证明,StandardScaler缩放+SVC分类模型的效果要好于随机森林分类。

小结与展望

  • 现实世界中的机器学习很少仅涉及单个模型的独立应用
  • 管道可以将多个步骤封装为一个对象,同样提供了fit/transform/predict方法。
  • 交叉验证/网格搜索+管道是一门艺术,让我们找到最佳组合变得非常方便。
  • 我们已经学完scikit-learn提供的所有通用工具与算法。

如果文章帮助您解决了工作难题,您可以帮我点击屏幕上的任意广告,或者赞助少量费用来支持我的持续创作,谢谢~