请稍等 ...
×

采纳答案成功!

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

视频中数据预处理x_train=standardscaler.transform(x_train) ,只对x_train做归一化

视频中数据预处理x_train=standardscaler.transform(x_train) ,只对x_train做归一化,不需要对y_train做,是不是因为y是标签值(如果在回归计算时应对对y_train也归一化吧)。

正在回答

3回答

我测试了一下你的数据,问题出在LinearSVR上。


根据你的代码,你可以看一下,训练出的LinearSVR的r2值,无论是在训练数据集上,还是测试数据集上,都是负数。回忆一下课程里介绍的r^2值的定义,负数代表拟合效果极差,预测效果还不如直接使用平均数。


如果你看一下y_predict的具体值,会发现所有的y_predict都是4k左右。绘制出的曲线,是在4k的基础上的一个误差曲线。这就是图示左上角那个1e-9+4e3的意思。


看这个曲线,确实像是对y进行了某种归一化的结果。但我不知道它具体是怎么做的。我以前没有意识到过这个问题,也没有调查过这个问题,在LinearSVR的文档里也没有找到解释。


我尝试使用了一下SVR(kernel='linear')和LinearRegression,都能得到正常的结果。所以我也不确定是什么原因,甚至可能是sklearn实现的LinearSVR的bug(内部对y进行了转换,外部没转换回来)。当然,不排除是因为我不会用LinearSVR,但即使如此,我也倾向于认为这个LinearSVR封装的不合理。因为如果它对y进行了变化,这个变化完全没有必要让用户感知到,在算法内部可以很容易地将y转换回来。


anyway,我的结论,如果你一定是用线性SVM做这个回归分析,不要使用LinearSVR,使用SVR(kernel='linear')


继续加油!:)

0 回复 有任何疑惑可以回复我~
  • 提问者 qq_慕姐45445 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2019-04-28 13:27:06
提问者 qq_慕姐45445 2019-04-25 21:19:10

bobo老师您好,我用时间序列数据做分析,发现对x_train做归一化后与y_trian拟合一个模型,在用x_test 做预测,得到的y_predict 与y_test有一个数量级的截距,尽管拟合看起来差不多

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


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

这里我先对数据做归一化,没有在pipe里面做应该也一样的吧。2副图我是分开打印才显出来的,否则只能看到一幅

0 回复 有任何疑惑可以回复我~
  • 你的x_test有没有做同等的归一化?
    回复 有任何疑惑可以回复我~ 2019-04-25 21:20:52
  • 提问者 qq_慕姐45445 回复 liuyubobobo #2
    做了,老师。我要不要把代码贴出来,不过数据是本地的
    回复 有任何疑惑可以回复我~ 2019-04-25 21:25:06
  • liuyubobobo 回复 提问者 qq_慕姐45445 #3
    把你的数据和代码发我一份吧。我有时间看一下怎么回事儿。liuyubobobo@gmail.com
    回复 有任何疑惑可以回复我~ 2019-04-25 21:34:04
liuyubobobo 2019-03-13 01:38:22

对,标签值不能进行归一化!


以房价预测为例,y_train就是每一个房产对应的价格;以学生成绩预测为例,y_train就是每个学生的学习成绩。我们不对它进行归一化,最后我们的模型预测出来就是实际的房产价格,或者实际的学生成绩。这就是我们想要的!


如果对y_train进行了归一化,那么我们预测出来的,就是一个归一化以后的数值,我们还需要将这个数值反归一化,实际上进行了一个冗余的步骤:)(因为我们本来就想知道房产价格和学生成绩,为什么要归一化以后再反归一化呢?)


继续加油!:)

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