Python支持向量回归SVR拟合、预测回归数据和可视化准确性检查实例

支持向量回归(SVR)是一种回归算法,它应用支持向量机(SVM)的类似技术进行回归分析。

由Kaizong Ye,Liao Bao撰写

正如我们所知,回归数据包含连续的实数。

为了拟合这种类型的数据,SVR模型在考虑到模型的复杂性和错误率的情况下,用一个叫做ε管(epsilon-tube,ε表示管子的宽度)的给定余量来接近最佳值。

×

回归和分类从某种意义上讲,本质上是一回事。SVM分类,就是找到一个平面,让两个分类集合的支持向量或者所有的数据(LSSVM)离分类平面最远;SVR回归,就是找到一个回归平面,让一个集合的所有数据到该平面的距离最近。

  我们来推导一下SVR。根据支持向量机二分类博客所述,数据集合归一化后,某个元素到回归平面的距离为r=d(x)−g(x)r=d(x)−g(x)。另外,由于数据不可能都在回归平面上,距离之和还是挺大,因此所有数据到回归平面的距离可以给定一个容忍值ε防止过拟合。该参数是经验参数,需要人工给定。如果数据元素到回归平面的距离小于ε,则代价为0。SVR的代价函数可以表示为:


cost(x)=max(0,|d(x)−g(x)|−ε)


其中d是标准答案。考虑松弛变量 ξi,ξ∗iξi,ξi∗,分别代表上下边界的松弛因子。有约束条件:

{d(xi)−g(xi)<ε+ξi,ξi≥0g(xi)−d(xi)<ε+ξ∗i,ξ∗i≥0


我们实际上是要最小化 ξi,ξ∗iξi,ξi∗。我们为了获得w的稀疏解,且假设w的计算结果满足正态分布,根据贝叶斯线性回归模型,对w有L2范数约束。

  SVR可以转变为最优化问题:

Φ(x)=∑i(ξi+ξ∗i)+12C′wTw→Φ(x)=C∑i(ξi+ξ∗i)+12wTw


其中C是惩罚因子,是人为给定的经验参数。考虑约束条件,引入拉格朗日算子 α,α∗,β,β∗α,α∗,β,β∗,将最优化问题转化为对偶问题:

J=12wTw+C∑i(ξi+ξ∗i)+∑iαi[d(xi)−g(xi)−ε−ξi]+∑iα∗i[g(xi)−d(xi)−ε−ξ∗i]−∑iβiξi−∑iβ∗iξ∗i


然后分别求导得到:

∂J∂w=w−(∑iαixi−∑iα∗ixi)=0∂J∂b=∑i(αi−α∗i)=0∂J∂ξi=C−αi−βi=0∂J∂ξ∗i=C−α∗i−β∗i=0C=αi+βi=α∗i+β∗i

  将上述式子代入J函数有:

J=12wTw−∑i(αi−α∗i)wxi−b∑i(αi−α∗i)−∑i(αi+α∗i)ε+∑i(αi−α∗i)d(xi)+C∑i(ξi+ξ∗i)−∑iαiξi−∑iα∗iξ∗i−∑i(C−αi)ξi−∑i(C−α∗i)ξ∗i=12(∑iαixi−∑iα∗ixi)(∑jαjxj−∑jα∗jxj)−(∑iαixi−∑iα∗ixi)(∑jαjxj−∑jα∗jxj)−∑i(αi+α∗i)ε+∑i(αi−α∗i)d(xi)=−12∑i∑j(αi−α∗i)(αj−α∗j)xixj−∑i(αi+α∗i)ε+∑i(αi−α∗i)d(xi)subject to 0≤αi,α∗i≤C


其中 ξ,ξ∗,β,β∗ξ,ξ∗,β,β∗都在计算过程中抵消了,非常神奇。 ε,Cε,C则是人为给定的参数,是常量。如果要使用核函数,可以将上式写成:

J=−12∑i∑j(αi−α∗i)(αj−α∗j)k(xixj)−∑i(αi+α∗i)ε+∑i(αi−α∗i)d(xi)


  SVR的代价函数和SVM的很相似,但是最优化的对象却不同,对偶式有很大不同,解法同样都是基于拉格朗日的最优化问题解法。求解这类问题的早期解法非常复杂,后来出来很多新的较为简单的解法,对数学和编程水平要求高,对大部分工程学人士来说还是颇为复杂和难以实现,因此大牛们推出了一些SVM库。比较出名的有libSVM,该库同时实现了SVM和SVR。


在本教程中,我们将通过在 Python 中使用 SVR ,简要了解如何使用 SVR 方法拟合和预测回归数据。教程涵盖:

  • 准备数据
  • 模型拟合和预测
  • 准确性检查
  • 源代码

我们将从在 Python 中加载所需的库开始。

import numpy as np

准备数据

我们将使用回归数据作为目标数据进行拟合。我们可以编写简单的函数来生成数据。

y = make(x)
x = np.array

plt.scatter
plt.show()


视频

支持向量机SVM、支持向量回归SVR和R语言网格搜索超参数优化实例

探索见解

去bilibili观看

探索更多视频

模型拟合和预测

我们来定义模型。该模型可以与默认参数一起使用。我们将在 x 和 y 数据上拟合模型。

svr 
print(svr)

在这里,可以根据回归数据特征更改核、C 和 epsilon 参数。核识别算法中的核类型。可以使用“rbf”(默认内核)、“linear”、“poly”和“sigmoid”。

接下来,我们将使用 svr 模型预测 x 数据。

predict(x)

为了检查预测结果,我们将在图中可视化 y 和 yfit 数据。

plt.scatter
plt.plot
plt.legend
plt.show

Python用户流失数据挖掘:建立逻辑回归、XGboost、随机森林、决策树、支持向量机、朴素贝叶斯模型和Kmeans用户画像

阅读文章



随时关注您喜欢的主题


准确性检查

最后,我们将使用 R 平方和 MSE 指标检查模型和预测准确性。

score
print("R-squared:", score)
print("MSE:", measquaederor)

在本教程中,我们简要了解了如何使用 Python 中的 SVR 方法拟合回归数据。


可下载资源

关于作者

Kaizong Ye拓端研究室(TRL)的研究员。

本文借鉴了作者最近为《R语言数据分析挖掘必知必会 》课堂做的准备。

​非常感谢您阅读本文,如需帮助请联系我们!

 
QQ在线咨询
售前咨询热线
15121130882
售后咨询热线
0571-63341498

关注有关新文章的微信公众号


永远不要错过任何见解。当新文章发表时,我们会通过微信公众号向您推送。

技术干货

最新洞察

This will close in 0 seconds