SVR回归模型

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

         

 

 

  上图显示了SVR的基本情况:

  1. f(x)=wx+b是我们最终要求得的模型函数
  2. wx+b+ϵwx+b-ϵ(也就是f(x)+ ϵ和f(x)- ϵ)是隔离带的上下边缘
  3. ξ∗是隔离带下边缘之下样本点,到隔离带下边缘上的投影,与该样本点y值的差。

           

 

 

 

原理:

 

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

 

 

 

公式表示:

        

  SVR模型在使用中和传统的一般线性回归模型也有一些的区别,其区别主要体现在:

  1. SVR模型中当且仅当和f(x)和y之间的差距的绝对值大于ϵ时才计算损失,而一般的线性模型中只要f(x)和y不相等就计算损失。
  2. 两种模型的优化方法不同,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

      和鲸训练营:机器学习1 - Heywhale.com

      支持向量回归(SVR)的详细介绍以及推导算法_与秃顶斗争!的博客-CSDN博客_svr

 

posted @ 2022-03-23 17:38  hungry_J  阅读(518)  评论(0)    收藏  举报