解决margin塌陷的问题_机器学习入门 119 SVM思想解决回归问题

2e00fec08b661afce9b91839db450027.png 你对人人都喜欢,也就是说,你对人人都漠然。--王尔德 全文字数: 1495字 阅读时间: 9分钟

前言

本系列是《玩转机器学习教程》一个整理的视频笔记。本小节简单介绍如何使用支撑向量机的思想来解决回归问题,最后通过sklearn封装好的LinearSVR类实现波士顿房价的预测。

a    SVM的思想解决回归问题 回归问题的本质其实就是找到一根直线( 或曲线 )能够最大程度的拟合样本数据点,不同定义拟合的方式对应着不同的回归算法。 比如前面介绍的线性回归算法定义拟合的方式就是让样本点到预测的这根直线的MSE的值最小。 SVM的思想解决回归问题对拟合的定义是指定一个margin值( 在使用SVM的思想解决分类问题的时候,对应决策边界的上下也有一个margin ),与SVM的思想解决分类问题的margin不同, 使用SVM的思想解决回归问题期望在这个给定的margin范围内包含的样本点越多越好 margin范围内的样本点越多代表这个margin范围能够更好的表达我们的样本点,在这种情况下,取margin范围中间的这根直线作为真正的回归结果。

0a39221ebc90f527f501fe0f1a1b19dd.png

SVM的思想解决分类问题时,期望margin范围内的样本点越少越好,在极端情况下的hard margin svm要求margin范围里一个样本点都没有,但对于SVM的思想解决回归问题来说,恰恰相反,我们期望在margin范围里的样本点越多越好。 具体在使用SVM的思想解决回归问题的时候需要对这个margin范围进行一个指定,因此这里引入一个称为epsilon的超参数, 超参数 epsilon表示的是margin上下两根直线中任意一根直线到中间这根直线之间的距离。

6a23c039a223af438c3940e1bc05561a.png

1b78db1ff7dd823fa32f0b8c7355c893.gif b    sklearn中的SVC

sklearn针对SVM的思想解决回归问题提供了封装好的SVR类(support vector regression)。本小节使用波士顿房价的数据集,获取数据集之后使用train_test_split方法将数据集划分为训练集和测试集。

036d9c3d26eb1824de0cf52d3aed15ef.png

准备好了数据集,接下来就可以使用sklearn为我们封装好的使用SVM的思想解决回归问题的LinearSVR类和SVR类,如果需要使用这两个封装类需要从sklearn.svm模块中导入。LinearSVR和前面介绍的LinearSVC相对应,只不过LinearSVR是使用线性SVM的思想来解决回归问题,而LinearSVC是使用线性SVM的思想来处理分类问题(SVR: support vector regression,SVC: support vector classification)。类似于SVC(LinearSVC为线性分类器,而SVC为非线性分类器),在sklearn.svm模块中还有SVR类,对于SVR类来说我们可以传入不同的核函数进行计算,实例化SVR类时构造函数中参数的设置和之前介绍的SVC类近乎一样,只有一点区别就是对于SVR类来说,我们需要传入一个epsilon超参数,这个epsilon超参数就是上面提到的margin上下两根直线中任意一根直线到中间这根直线之间的距离。

da575827941ee19599d74bdafe98a201.png

相应的使用SVR之前也需要对数据进行标准化,所以使用Pipeline管道将标准化和回归这两个步骤连在一起。这里仅仅为了演示如何使用sklearn封装的SVM的思想解决回归问题,所以直接使用简单的LinearSVR,只指定用户传入的epsilon超参数,当然对于SVR来说还有一个非常重要的超参数C,为了简单起见,这里超参数C使用默认值。

接下来就可以实例化,在构造的时候不传入任何参数,epsilon超参数直接使用默认的0.1,之后使用fit方法对X_train和y_train进行拟合训练,训练完成之后调用score方法对X_test和y_test进行评估,在回归问题中score计算的是R方值。

18ed6c32534539fea736e4fc77b22490.png

此时计算出来的R方值为0.63,显然这个结果不够好,这里仅仅为了演示如何使用sklearn封装的SVM的思想解决回归问题。使用SVR有很多超参数可以调节,除了epsilon之外还包括C,如果使用的不是LinearSVR而是使用SVR类,还可以选择多项式核函数或者高斯核函数,对于不同的核函数又有不同的超参数,比如如果使用多项式核函数我们可以调节degree和小c的值,如果使用高斯核函数我们可以调节对应的gamma值。一定要注意我们不能仅仅看一次train_test_split得到的score值,很有可能此时模型已经对样本点过拟合,得到的score值并不准确,此时可以使用交叉验证的方式来得到更加准确的score值。

2c9eaedc46bd8b1232bc7266ca748bc7.gif

9054b8559a271fbf97bfd47c6bf4cf6d.png

72aa51c761adb2d4b1fe8828d3d106f7.png

【机器学习】机器学习入门 11-6 到底什么是核函数

【机器学习】机器学习入门 11-7 RBF核函数

【机器学习】机器学习入门  11-8 RBF核函数中的gamma

【Pytorch】PyTorch入门视频笔记-PyTorch初见

【Linux】详解 Linux 中的硬链接与软链接

612040c52cda5800b6b2d4414fc06ed6.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值