1 支持向量回归(SVR)基本概念
支持向量回归是支持向量机在回归问题上的扩展应用。它的核心思想是:在高维特征空间中构建一个最优超平面,使得所有样本点到这个超平面的距离最小,同时控制模型复杂度。
让我们从以下几个方面深入了解SVR:
1.1 基本原理
SVR引入了ε-不敏感损失函数。具体来说:
- 当样本点和预测值的误差小于ε时,认为没有损失
- 当误差大于ε时,损失为误差与ε之差的绝对值
- 这形成了一个"管道",宽度为2ε,目标是让尽可能多的点落在管道内
1.2 数学表达
优化目标函数为:
min 1/2 ||w||² + C∑(ξi + ξi*)
s.t. yi - (w·xi + b) ≤ ε + ξi
(w·xi + b) - yi ≤ ε + ξi*
ξi, ξi* ≥ 0
其中:
- w是权重向量
- b是偏置项
- C是惩罚参数
- ξi和ξi*是松弛变量
- ε控制不敏感区域的宽度
主要参数
重要的参数包括:
- C(惩罚参数): 控制模型对训练误差的容忍程度。C越大,模型越倾向于过拟合
- ε(不敏感区域宽度): 控制支持向量的数量。ε越大,支持向量越少
- kernel(核函数): 常用的有线性核、多项式核、RBF核等
- gamma: 使用RBF核时的参数,控制核函数的形状
2 实现示例
让我创建一个使用SVR的代码示例:
import numpy as np
from sklearn.svm import SVR
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score
import matplotlib.pyplot as plt
# 生成示例数据
np.random.seed(42)
X = np.sort(5 * np.random.rand(100, 1), axis=0)
y = np.sin(X).ravel() + np.random.normal(0, 0.1, X.shape[0])
# 数据分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 数据标准化
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# 创建并训练SVR模型
svr_rbf = SVR(kernel='rbf', C=100, epsilon=0.1, gamma=0.1)
svr_rbf.fit(X_train_scaled, y_train)
# 预测
y_pred = svr_rbf.predict(X_test_scaled)
# 模型评估
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
# 可视化结果
plt.figure(figsize=(10, 6))
# 绘制原始数据点
plt.scatter(X_test, y_test, color='black', label='Data')
# 绘制预测曲线
X_plot = np.linspace(X.min(), X.max(), 100)[:, np.newaxis]
X_plot_scaled = scaler.transform(X_plot)
y_plot = svr_rbf.predict(X_plot_scaled)
plt.plot(X_plot, y_plot, color='red', label='SVR Model')
# 绘制ε管道
plt.fill_between(X_plot.ravel(),
y_plot - svr_rbf.epsilon,
y_plot + svr_rbf.epsilon,
color='red',
alpha=0.2)
plt.xlabel('X')
plt.ylabel('y')
plt.title('Support Vector Regression')
plt.legend()
print(f'Mean Squared Error: {mse:.4f}')
print(f'R² Score: {r2:.4f}')
3 SVR的优缺点
优点:
- 可以处理非线性问题
- 具有较好的泛化能力
- 避免过拟合
- 解是全局最优解
缺点:
- 计算复杂度较高,尤其是样本量大时
- 对参数选择较敏感
- 对非平稳数据和噪声敏感
- 计算结果不易解释
4 应用场景
SVR适用于以下场景:
- 时间序列预测
- 金融市场预测
- 温度、湿度等环境数据预测
- 销量预测
- 能源消耗预测
5 调优建议
在实践中调优SVR时,可以:
- 使用网格搜索找到最优参数组合
- 根据数据特点选择合适的核函数
- 通过交叉验证评估模型性能
- 注意特征工程和数据预处理的重要性