请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

pipeline

老师,对于使用Pipeline构造多项式逻辑回归,有办法可以看到各个特征对应的系数coef吗?


正在回答 回答被采纳积分+3

4回答

liuyubobobo 2018-06-14 02:43:20

如果你不使用GridSearchCV,直接使用Pipeline进行训练的话,可以在创建 Pipeline 的外面创建LogisticRegression的对象log_reg。将这个log_reg传给Pipeline之后,在Pipeline训练以后,直接取log_reg的coef_即可。完整的代码示意如下图(省略模拟数据的创建过程):

https://img1.sycdn.imooc.com//szimg/5b21631c00012c5612110623.jpg


但是如果你使用GridSearchCV进行网格搜索,则不一样。因为GridSearchCV内部要尝试不同的参数组合,所以会创建多个LogisticRegression的实例对象,而不会把最终结果存在你传的log_reg的实例中。所以对于GridSearchCV,在训练以后,应该调用best_estimator_(存放搜索后参数最优的那个Pipeline对象)中的named_steps数组(存放Pipeline中每一步的实例对象)相应log_reg那个名字的coef_。具体代码示例如下:

https://img1.sycdn.imooc.com//szimg/5b2164dc0001a8e711990929.jpg

https://img1.sycdn.imooc.com//szimg/5b2164bf00017c6c12000416.jpg


其实,named_steps数组是Pipeline的参数(此时,grid_search.best_estimator_)是Pipeline的一个对象。所以,其实在我说的第一种情况,不使用GridSearchCV进行网格搜索的时候,要想获得log_reg的coef_,也并不需要一定在Pipeline的外面创建LogisticRegression的实例对象,而同样可以使用named_steps的方式获得,有兴趣可以试试看,加深一下对Pipeline这个类的理解:)


加油!:)

1 回复 有任何疑惑可以回复我~
  • 提问者 慕先生6474118 #1
    感谢 bobo 老师详细的解答~ ?
    回复 有任何疑惑可以回复我~ 2018-06-14 20:08:59
慕粉4186965 2019-07-08 22:07:00

但是对于name_steps得到的系数,差距有点大

https://img1.sycdn.imooc.com/szimg/5d234e00090dbe8907320497.jpg

https://img1.sycdn.imooc.com//szimg/5d234e000001218506370477.jpg


0 回复 有任何疑惑可以回复我~
  • 可以参考这里:http://coding.imooc.com/learn/questiondetail/130281.html
    回复 有任何疑惑可以回复我~ 2019-07-10 00:58:47
提问者 慕先生6474118 2018-06-13 21:15:18

或者 还是说一般逻辑回归对于线性的决策边界是白盒子;但是对于非线性的决策边界,即使是degree=3的简单情况,对于十几维的特征空间,引入多项式后维数也达到了很大的一个级别,这时是不是不方便看每个特征对应的系数,查看对结果的影响因子了?就也成黑盒子了;

0 回复 有任何疑惑可以回复我~
提问者 慕先生6474118 2018-06-13 14:11:42


https://img1.sycdn.imooc.com//szimg/5b20b58a0001178405980349.jpg

https://img1.sycdn.imooc.com//szimg/5b20b5940001c37006220176.jpg

会报错


0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信