当前位置:   article > 正文

机器学习python实践——关于管道模型Pipeline和网格搜索GridSearchCV的一些个人思考

机器学习python实践——关于管道模型Pipeline和网格搜索GridSearchCV的一些个人思考

最近在利用python跟着指导书进行机器学习的实践,在实践中使用到了Pipeline类方法和GridSearchCV类方法,并且使用过程中发现了一些问题,所以本文主要想记录并分享一下个人对于这两种类方法的思考,如果有误,请见谅,欢迎大家一起前来探讨。当然,如果这篇文章还能入得了各位“看官”的法眼,麻烦点赞、关注、收藏,支持一下!

本文主要想重点记录一下Pipeline类方法和GridSearchCV类方法在使用过程中的一些不易察觉的注意事项,花不多说,进入正文

一、Pipeline类方法使用过程中的注意事项

Pipeline类方法有一个关键参数:steps

1、steps的格式:由多个二维元组组成的多维列表,且列表中的最后一个元组代表估计器

2、steps中的元组格式为:(命名,转换器/估计器),命名我们可以随便设置,但是一定要是字符串

3、steps中的元组不能仅含一个元素,即不可以写成:(命名,)

4、可以通过“passthrough”或者“None”来删除转换器/估计器,即:(命名,'passtrhough')(命名,'None')

二、GridSearchCV类方法使用过程中的注意事项

GridSearchCV类方法有三个关键参数:estimatorparam_gridcv

1、estimator:带有score方法的估计器,如果估计器没有score方法,必须通过GridSearchCV类方法的参数“scoring”来指定评分策略

2、param_grid:参数字典,该字典是键为字符串形式,值为数组形式

3、cv:交叉验证策略,当cv的值为一个整数或者None时,如果估计器是分类器,则采用的是分层交叉验证,即StratifiedKFold,对于其它情况适用的是k折交叉验证,即KFold

三、结合Pipeline和GridSearchCV进行模型选择的注意事项

1、传递给GridSearchCV的Pipeline实例化对象,必须含有完整的steps列表

正确形式:

  1. pipe=Pipeline([('scaler',StandardScaler()),('reg',MLPRegressor())])
  2. grid=GridSearchCV(pipe,param_grid=params,cv=3)

错误形式:

  1. pipe=Pipeline([('scaler',),('reg',)])
  2. grid=GridSearchCV(pipe,param_grid=params,cv=3)

2、结合Pipeline和GridSearchCV进行模型选择时,Pipeline实例化对象的转换器和估计器,在GridSearchCV中不会被调用,举例说明:

  1. #定义参数字典
  2. params=[{'reg':[MLPRegressor(random_state=38,max_iter=1600)],'scaler':[StandardScaler(),None]},
  3. {'reg':[RandomForestRegressor(random_state=38)],'scaler':[None]}]
  4. pipe=Pipeline([('scaler',MinMaxScaler()),('reg',SVC)])
  5. #对管道模型进行网格搜索
  6. grid=GridSearchCV(pipe,param_grid=params,cv=3,verbose=20)

运行上述代码,结果为:

从结果中不难看出,参数字典中的参数组合有三种,GridSearchCV对三种不同的参数组合根据cv值分别进行了交叉验证;同时,Pipeline实例化对象pipe中的转换器MinMaxScaler()以及估计器SVC()并未被执行

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/774154
推荐阅读
相关标签
  

闽ICP备14008679号