pipeline

来源:10-9 多分类问题中的混淆矩阵

慕先生6474118

2018-06-13

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


写回答

4回答

liuyubobobo

2018-06-14

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

//img.mukewang.com/szimg/5b21631c00012c5612110623.jpg


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

//img.mukewang.com/szimg/5b2164dc0001a8e711990929.jpg

//img.mukewang.com/szimg/5b2164bf00017c6c12000416.jpg


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


加油!:)

1
1
慕先生6474118
感谢 bobo 老师详细的解答~ ?
2018-06-14
共1条回复

慕粉4186965

2019-07-08

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

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

//img.mukewang.com/szimg/5d234e000001218506370477.jpg


0
1
liuyubobobo
可以参考这里:http://coding.imooc.com/learn/questiondetail/130281.html
2019-07-10
共1条回复

慕先生6474118

提问者

2018-06-13

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

0
0

慕先生6474118

提问者

2018-06-13


//img.mukewang.com/szimg/5b20b58a0001178405980349.jpg

//img.mukewang.com/szimg/5b20b5940001c37006220176.jpg

会报错


0
0

Python3入门机器学习 经典算法与应用  

Python3+sklearn,兼顾原理、算法底层实现和框架使用。

5858 学习 · 2437 问题

查看课程