采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
对于这个帖子中所说的解决方案,对于named_steps得到的系数,差距有点大
用
poly_reg.named_steps['lin_reg'].coef_
得到的系数为
array([0. , 1.6418146 , 1.70106747])
重新回答一下。
是的。标准化改变了数据,所以,原先数据线性关系所遵守的系数丧失了。得到的系数是不一样的。但由于标准化本身是线性变换,所以,数据之间还会满足线性关系,遵守一个新的线性系数,就是你看到的这个不一样的线性系数。
怎么验证这个结果还是合理的呢?可以看R^2的值,即sklearn中回归算法的score值,得到的结果,和标准化的结果是一样的。
以下是我的实验:
继续加油!:)
哦,明白了,谢谢老师。 我可以这样理解吧:对于实际工作中的X和y,我们预先不知道系数的大致范围,所以如果标准化,那么测试数据集和预测数据集都要标准化,这样得到了一个X',这个X' 、y得到的系数和X、y得到的系数,虽然y是一样的,但是X'和X不同那么系数肯定不同。这两种方式都是正确的,只是一个以后进行predict的数据一定要预先标准化
对!:)
不做标准化,能得到相似的系数
在管道里,首先对数据进行了多项式特征,所以这个lin_reg是针对多项式特征做的回归。而不再是原始数据。所以,已经不遵守你的原始数据设置的参数了。
应该用以下过程拆分管道,来模拟管道里的事情。因为管道里有三个元素,所以一共有三步:
这样不是没法得到正确的系数?但是不做标准化能得到相似的系数
抱歉,你是正确的。
我补充了一个新的答案。标准化后得到的系数不同了,这是因为数据改变了。但是,我们算出的新系数,针对标准化后的数据,是正确的:)
登录后可查看更多问答,登录/注册
Python3+sklearn,兼顾原理、算法底层实现和框架使用。
2.5k 19
3.5k 17
3.0k 15
1.6k 15
1.5k 14