深入机器学习2:浅析为什么SVR预测值都相同

深入机器学习2:浅析为什么SVR预测值都相同

前言

​ 本系列靠很多参考资料支撑,随缘更新,主要的目的是帮我自己复习梳理一下知识,顺便分享一下自己的理解。

必备说明

​ 本系列写起来很费劲,需要打公式,还需要自己理解。所以,如果有打错字请理解,如果有说错,请务必指出,欢迎大家一起讨论学习。

目录结构

1. 问题的发生:

​ 今天,在写代码的时候,用到了支持向量回归模型,但是结果发现,预测的值居然几乎相差不大,效果非常差,见下图:

在这里插入图片描述

2. 思考方向1:核函数

​ 这个现象把我问住了,因为在我的理解了SVR应该就像SVM一样,十分的强大才对。

​ 我的SVR模型代码为:

SVR( kernel='rbf',C=0.01)

​ 我首先怀疑的是,核函数没有选择好,于是我又改用了其它的核函数,结果如下图:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

​ **可以看到的是,结果都不好,预测值几乎都相同。**说明,核函数并不是影响值相同的因素。

3. 思考方向2:C值

​ 排除掉核函数后,就只剩下为数不多可以影响结果的模型参数,其中一个就是C值。

​ 于是,我针对RBF核函数,采取了C=0.1\1\10\100四种值来运行上面的代码,结果分别如下图:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

好家伙,原来就是你小子作怪。

​ 找到了影响的参数,那么我非常想要知道,为什么会发生这样的事情。

4. 为什么发生?C值的作用

​ 我想起之前分享的一篇文章详解正则表达式中,提及了一点:当逻辑回归中没有正则项时,w值会因为损失函数值越小越好,而趋近于无穷。

​ 于是,我有一个想法,当C值越来越小,是不是意味着模型的w值会越来越趋近于0,那么模型最后只剩下一个bias值,自然输出就是固定的了。

​ 有了这个想法后,我就打开自己关于SVR的笔记(由于主要学的是SVM,相信很大多和我一样其实对SVR只是了解,而不熟悉),发现了一个公式:

在这里插入图片描述

​ **这个公式来自西瓜书关于SVR优化目标的推导。**其实,已经不难发现,当C值越小,右边的项值也越小,那么优化目标就变为了:

min ||w||

​ 而w值自然越趋近于0越好了,也不难知道,最后的预测值相同的原因就是输出的都是bias。

​ 为了证实这一点,我又把我的代码修改了一下,把每次的bias打印出来:

[32.00348518]

​ 而这个bias对应的图为:

在这里插入图片描述

​ 另外,C右边的一项含义是:**当点超过我们的容忍范围时,才计入损失中。**而C值表示其权重。

​ 那么,假设我们的模型已经学习好了(但是还在学习中),但是有些点肯定是没有学习到的,即有些点(记为A类点)在我们的容忍范围之外,此时,c值越大,这些A类点所占比例越大,那么模型就会继续调整,争取把这些A类点也学到。

这意味着什么,意味着训练越来越好,越来越容易过拟合。

​ 验证这个猜想,我继续修改代码,把C值放大,并且换一种方式画图(此时的代码来自别人的博客,我之前的是自己的数据):
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

5. 总结(省时间环节):

​ 经过上面的讨论,不难看出:

  • 预测值相同,是因为C值没有设置好,与选择的核函数关系不太大
  • C值越大,越容易过拟合
  • C值越小,输出的值越容易趋近于相同值,这个相同值是bias截距,因为此时w趋近于0

参考博客:

https://blog.csdn.net/manjhOK/article/details/80367624
  • 9
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值