支持向量回归(SVR)模型示例

支持向量回归(Support Vector Regression, SVR)是一种基于支持向量机(Support Vector Machine, SVM)的回归分析方法。它通过使用不同的核函数,如线性核、多项式核和径向基函数(RBF)核,来处理线性和非线性问题。本文将介绍如何使用Python的scikit-learn库来实现这些SVR模型,并展示一个一维数据回归的示例。

生成样本数据

首先,需要生成一些样本数据来训练SVR模型。在这个例子中,将创建一个简单的一维数据集,其中目标值是输入值的正弦函数,并且在一些数据点上添加了一些噪声。

import numpy as np # 生成输入数据 X = np.sort(5 * np.random.rand(40, 1), axis=0) # 计算目标值 y = np.sin(X).ravel() # 为部分数据点添加噪声 y[::5] += 3 * (0.5 - np.random.rand(8))

拟合回归模型

接下来,将使用三种不同的核函数来拟合SVR模型。这些模型包括使用RBF核的SVR、使用线性核的SVR和使用多项式核的SVR。将为每个模型设置不同的参数,以便观察它们在回归任务中的表现。

from sklearn.svm import SVR # 使用RBF核的SVR svr_rbf = SVR(kernel="rbf", C=100, gamma=0.1, epsilon=0.1) # 使用线性核的SVR svr_lin = SVR(kernel="linear", C=100, gamma="auto") # 使用多项式核的SVR svr_poly = SVR(kernel="poly", C=100, gamma="auto", degree=3, epsilon=0.1, coef0=1)

查看结果

在拟合了SVR模型之后,可以绘制出模型的预测结果,并与原始数据进行比较。将为每种核函数绘制一个子图,并在图中显示支持向量和其它训练数据。

import matplotlib.pyplot as plt # 设置图表的参数 lw = 2 svrs = [svr_rbf, svr_lin, svr_poly] kernel_label = ["RBF", "Linear", "Polynomial"] model_color = ["m", "c", "g"] # 创建子图 fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(15, 10), sharey=True) # 绘制每个模型的预测结果 for ix, svr in enumerate(svrs): axes[ix].plot(X, svr.fit(X, y).predict(X), color=model_color[ix], lw=lw, label="{} model".format(kernel_label[ix])) axes[ix].scatter(X[svr.support_], y[svr.support_], facecolor="none", edgecolor=model_color[ix], s=50, label="{} support vectors".format(kernel_label[ix])) axes[ix].scatter(X[np.setdiff1d(np.arange(len(X)), svr.support_)], y[np.setdiff1d(np.arange(len(X)), svr.support_)], facecolor="none", edgecolor="k", s=50, label="other training data") axes[ix].legend(loc="upper center", bbox_to_anchor=(0.5, 1.1), ncol=1, fancybox=True, shadow=True) # 设置图表的标题和标签 fig.text(0.5, 0.04, "data", ha="center", va="center") fig.text(0.06, 0.5, "target", ha="center", va="center", rotation="vertical") fig.suptitle("Support Vector Regression", fontsize=14) # 显示图表 plt.show()

通过上述代码,可以看到不同核函数的SVR模型在一维数据回归任务中的表现。RBF核的SVR模型通常能够更好地处理非线性问题,而线性核和多项式核的SVR模型则更适合处理线性问题。通过比较这些模型的预测结果,可以更好地理解它们在不同情况下的适用性。

整个脚本的运行时间大约为0.439秒。可以通过以下链接下载Jupyter笔记本、Python源代码或压缩包:

  • Jupyter笔记本:
  • Python源代码:
  • 压缩包:
  • 核岭回归与SVR的比较
  • RBF SVM参数
  • 绘制分类概率
  • 网格搜索与连续减半的比较
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485