sklearn.svm.SVR
(支持向量机回归器)
SVR
(Support Vector Regression)是 sklearn.svm
提供的 支持向量机(SVM)回归模型,适用于 非线性回归任务,尤其在 小数据集和高维数据 中表现良好。
1. SVR
作用
- 用于回归任务(如 房价预测、股票趋势分析)。
- 支持线性和非线性回归(核方法)。
- 适用于小数据集,高维数据(如文本回归)。
2. SVR
代码示例
(1) 训练 SVR 回归器
from sklearn.svm import SVR
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
# 生成回归数据
X, y = make_regression(n_samples=100, n_features=1, noise=10, random_state=42)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 训练 SVM 回归模型
model = SVR(kernel="rbf", C=1.0, epsilon=0.1)
model.fit(X_train, y_train)
# 预测
y_pred = model.predict(X_test)
# 计算 R²
r2 = model.score(X_test, y_test)
print("SVM 回归器 R²:", r2)
解释
kernel="rbf"
:使用 径向基函数(RBF)核,适用于非线性数据。C=1.0
:正则化参数,值越大,模型对误差更敏感(易过拟合)。epsilon=0.1
:允许误差范围,值越大,回归曲线更平滑。
3. SVR
主要参数
SVR(kernel="rbf", C=1.0, epsilon=0.1, gamma="scale", degree=3)
参数 | 说明 |
---|---|
kernel | 核函数类型("linear" 、"poly" 、"rbf" 、"sigmoid" ) |
C | 正则化参数(默认 1.0 ,值大则更关注误差,易过拟合) |
epsilon | 允许误差范围(默认 0.1 ,值越大,模型越宽松) |
gamma | 核函数参数(默认 "scale" ,值越大影响越局部) |
degree | 多项式核的阶数(仅在 kernel="poly" 时有效) |
4. epsilon
对回归效果的影响
epsilon_values = [0.01, 0.1, 0.5]
for eps in epsilon_values:
model = SVR(kernel="rbf", C=1.0, epsilon=eps)
model.fit(X_train, y_train)
print(f"epsilon={eps}, 测试集 R²={model.score(X_test, y_test)}")
解释
epsilon
小(如0.01
)时,拟合严格,可能过拟合。epsilon
大(如0.5
)时,回归曲线更平滑,可能欠拟合。
5. 计算模型性能
from sklearn.metrics import mean_squared_error, r2_score
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print("均方误差 MSE:", mse)
print("决定系数 R²:", r2)
解释
- MSE(均方误差):值越小,拟合效果越好。
- R²(决定系数):
1
表示完美拟合,0
表示无解释能力。
6. SVR
vs. LinearSVR
模型 | 适用情况 | 主要区别 |
---|---|---|
SVR | 非线性回归 | 支持核函数(默认 RBF),计算较慢 |
LinearSVR | 线性回归 | 计算更快,但不支持核函数 |
示例
from sklearn.svm import LinearSVR
linear_svr = LinearSVR(C=1.0, max_iter=1000)
linear_svr.fit(X_train, y_train)
print("SVR (RBF) 回归 R²:", model.score(X_test, y_test))
print("LinearSVR 回归 R²:", linear_svr.score(X_test, y_test))
解释
LinearSVR
适用于大规模数据,计算速度更快。
7. C
对模型的影响
C_values = [0.1, 1, 10]
for C in C_values:
model = SVR(kernel="rbf", C=C)
model.fit(X_train, y_train)
print(f"C={C}, 测试集 R²={model.score(X_test, y_test)}")
解释
C
小(如0.1
)时,允许误差较多,回归曲线更平滑。C
大(如10
)时,对误差更敏感,可能过拟合。
8. 适用场景
- 回归任务(如 房价预测、能源消耗预测)。
- 适用于小数据集,高维数据(如文本回归)。
- 当
LinearSVR
不能拟合复杂数据时,SVR
可能更优。
9. 结论
SVR
适用于回归任务,支持核方法进行线性和非线性回归,适用于小规模数据,比LinearSVR
更适合复杂数据,可以 调整C
和epsilon
控制模型复杂度。