SVR回归模型
SVR全称是support vector regression,是SVM(支持向量机support vector machine)对回归问题的一种运用。在之前的部分中有提到过SVM的原理及其用法,这里就不再赘述了。这里为大家提供了一张图来直观的理解SVM和SVR的区别和联系:

上图显示了SVR的基本情况:
- f(x)=wx+b是我们最终要求得的模型函数
- wx+b+ϵwx+b-ϵ(也就是f(x)+ ϵ和f(x)- ϵ)是隔离带的上下边缘
- ξ∗是隔离带下边缘之下样本点,到隔离带下边缘上的投影,与该样本点y值的差。

原理:
SVR在线性函数两侧制造了一个“间隔带”,对于所有落入到间隔带内的样本,都不计算损失;只有间隔带之外的,才计入损失函数。之后再通过最小化间隔带的宽度与总损失来最优化模型。
公式表示:

SVR模型在使用中和传统的一般线性回归模型也有一些的区别,其区别主要体现在:
- SVR模型中当且仅当和f(x)和y之间的差距的绝对值大于ϵ时才计算损失,而一般的线性模型中只要f(x)和y不相等就计算损失。
- 两种模型的优化方法不同,SVR模型中通过最大化间隔带的宽度和最小化损失来优化模型,而在一般的线性回归模型中是通过梯度下降后的平均值来优化模型。
SVR的应用:
SVR算法可以使用Scikit-Learn的SVR类来实现。应用方式如下:
from sklearn.svm import SVR regressor = SVR(kernel = 'rbf') #参数kernel是用来指定使用的核函数 regressor.fit(x,y)
代码实现:
import numpy as np import matplotlib.pyplot as plt import pandas as pd dataset = pd.read_csv('/home/mw/input/svrdemo9201/Demo data.CSV') X = dataset.iloc[:, 1:2].values Y = dataset.iloc[:, 2].values #对数据进行处理,并对数据进行标准化 X = np.reshape(X, (-1, 1)) Y = np.reshape(Y, (-1, 1)) from sklearn.preprocessing import StandardScaler sc_X = StandardScaler() sc_Y = StandardScaler() X = sc_X.fit_transform(X) Y = sc_Y.fit_transform(Y) #使用SVR模型对数据进行拟合 from sklearn.svm import SVR regressor = SVR(kernel = 'rbf') regressor.fit(X, Y) #使用训练的SVR模型进行预测,并将得到的预测值转化为正常值 Y_pred = regressor.predict(sc_X.transform(np.array([[5.5]]))) Y_pred = sc_Y.inverse_transform(Y_pred) #对数据进行可视化 plt.scatter(X, Y, color = 'red') plt.plot(X, regressor.predict(X), color = 'blue') plt.title('Truth or Bluff (SVR)') plt.xlabel('Position level') plt.ylabel('Salary') plt.show()
参考文献: (系列笔记)13.SVR模型_WNotSyer的博客-CSDN博客_svr
支持向量回归(SVR)的详细介绍以及推导算法_与秃顶斗争!的博客-CSDN博客_svr

浙公网安备 33010602011771号