ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

支持向量机回归(SVR)原理详解:从ε-不敏感带到核函数实战

支持向量机回归(SVR)原理详解:从ε-不敏感带到核函数实战 1. 项目概述从分类到回归的思维跃迁提起支持向量机很多朋友的第一反应是那个在分类任务中“画一条最宽马路”的经典算法。没错SVM在分类领域的表现堪称惊艳尤其是在处理小样本、非线性及高维数据时其强大的泛化能力让它成为机器学习工具箱里的明星。但今天我们不聊分类我们来聊聊它的“另一半”——支持向量机回归。你可能要问一个以“机”为名、听起来就为“分界”而生的模型怎么还能干回归预测的活儿这恰恰是SVR最精妙的地方它完成了一次漂亮的思维跃迁将分类问题中寻找最大间隔的“硬边界”思想巧妙地转化为回归问题中容忍预测误差的“软管道”。简单来说SVR的核心目标不再是找到一个超平面来分隔两类样本而是寻找一个能容纳大部分样本的“管道”。这个管道有一个核心半径ε我们称之为“不敏感损失参数”。只要样本的真实值落在以预测值为中心、上下宽度为ε的管道内我们就认为这个预测是“完美”的没有任何损失。只有当样本点落在这个管道之外时我们才开始计算损失。这种思路非常符合工程实践中的需求——我们往往可以接受一定范围内的预测误差只要误差不超出某个可容忍的阈值。SVR要做的就是在给定这个容忍度ε的前提下找到一个最“平坦”的函数通常是线性函数使得尽可能多的样本点被包含在管道内同时让落在管道外的点尽可能少且偏离程度小。那么SVR适合谁呢如果你正在处理样本量不大但特征维度可能很高的数据集比如某些金融时间序列预测、工业过程参数软测量、或生物信息学中的定量关系建模传统的线性回归可能因为共线性或非线性关系而力不从心而复杂的神经网络又可能因为数据量不足而严重过拟合。这时SVR就是一个非常值得尝试的选项。它继承了SVM的结构风险最小化原则在控制模型复杂度的同时追求较好的泛化性能尤其擅长处理那些存在潜在非线性关系但又不易用简单函数形式表达的问题。接下来我们就一层层剥开SVR的外壳看看这个“管道工”是如何工作的。2. 核心原理拆解从最大间隔到ε-不敏感带要理解SVR我们必须先回到它的“娘家”——支持向量机分类。在SVM分类中核心思想是结构风险最小化具体表现为寻找一个超平面使得两类样本到这个超平面的最小距离即间隔最大化。那些恰好落在间隔边界上的样本点就被称为“支持向量”它们是决定模型最终形态的关键少数。SVR完美地继承了这一思想内核但进行了一次天才般的“转译”。在回归任务中我们的输出是连续值不存在“类别”的概念。因此SVR定义了一个新的损失函数称为ε-不敏感损失函数。我更喜欢把它想象成一个“宽容的测量员”。这个测量员手持一把特殊的尺子这把尺子的中心是预测值f(x)尺子上下各有宽度为ε的“宽容区”。只要真实值y落在这个“预测值±ε”的区间内测量员就认为这次测量是“零误差”完全可接受。这个ε值就是你自己设定的容忍度它控制了模型的精度要求。ε设得越大管道越宽模型越“宽松”对误差的容忍度越高模型也就越简单更倾向于得到一个平坦的函数ε设得越小管道越窄模型越“严格”要求预测尽可能精确但模型也可能变得更复杂更容易过拟合。那么模型的目标函数是什么呢SVR的目标是找到一个线性函数 f(x) w·x b对于非线性情况会通过核函数映射到高维特征空间使得这个函数尽可能“平坦”。在数学上“平坦”意味着权重向量w的范数||w||²尽可能小这直接对应了SVM中最大化间隔的思想两者在优化问题上是对偶的。与此同时我们引入松弛变量ξ_i和ξ_i*来量化那些不听话、跑到管道外面的样本点所造成的误差。对于每个样本点ξ_i衡量了它在管道上方的超出量ξ_i衡量了它在管道下方的超出量。最终SVR的优化问题就变成了一个带约束的凸二次规划问题最小化正则化项(1/2)||w||²与所有松弛变量之和CΣ(ξ_i ξ_i)的组合并满足一系列约束条件确保每个样本点要么在管道内要么其误差被松弛变量准确捕获。这里的C是一个至关重要的超参数称为惩罚系数或正则化参数。它控制了模型对于落在管道外的样本的“惩罚”力度。C值越大表示你对误差的容忍度越低模型会不惜增加复杂度w可能变大也要努力把更多的点拉进管道或减少管道外的偏差这可能导致过拟合C值越小表示你更看重模型的简单性w小函数平坦允许更多的点落在管道外这可能导致欠拟合。所以ε和C共同决定了SVR模型的“性格”ε管宽度C管严度。理解这两个参数的博弈是调优SVR的关键。3. 数学形式与对偶问题求解光有思想不够我们得看看SVR具体是怎么算的。上面提到了原始优化问题我们把它写得更清楚一些。给定训练数据集{(x_1, y_1), (x_2, y_2), ..., (x_n, y_n)}SVR希望找到函数f(x) w·φ(x) b。这里φ(x)是将原始特征x映射到高维特征空间的函数这个映射通常通过核函数K(x_i, x_j) φ(x_i)·φ(x_j)隐式完成这是处理非线性问题的核心技巧。原始优化问题Primal Problem如下 最小化1/2 ||w||² C Σ_{i1}^{n} (ξ_i ξ_i^) 约束条件 y_i - w·φ(x_i) - b ≤ ε ξ_i, 对于所有 i w·φ(x_i) b - y_i ≤ ε ξ_i^, 对于所有 i ξ_i, ξ_i^* ≥ 0, 对于所有 i这个形式很直观目标函数第一部分让模型尽量平坦第二部分惩罚管道外的误差前两个约束定义了ε-不敏感带要求预测值与真实值的偏差绝对值不能超过ε加上相应的松弛变量。注意直接求解这个原始问题涉及高维空间中的w维度可能无穷大计算上不可行。因此和SVM分类一样我们需要通过拉格朗日乘子法将其转化为对偶问题Dual Problem。这是SVR以及SVM算法实现中的标准步骤也是引入核函数的关键环节。通过对每个约束引入拉格朗日乘子α_i, α_i^, η_i, η_i^构造拉格朗日函数然后求导并利用KKT条件我们可以得到对偶问题。这个过程有些繁琐但最终形式非常优美并且消除了对高维w的直接求解。对偶问题也是一个二次规划问题但它的变量是拉格朗日乘子α_i和α_i^*数量等于样本数n。最终我们得到的决策函数形式为 f(x) Σ_{i1}^{n} (α_i^* - α_i) K(x_i, x) b这个形式揭示了SVR的另一个美妙特性模型的预测结果只依赖于一部分样本——那些对应的(α_i^* - α_i)不为零的样本。这些样本就是SVR中的“支持向量”。它们要么落在ε-管道边界上此时0 |α_i^* - α_i| C要么落在管道之外此时|α_i^* - α_i| C。而其他落在管道内部、对模型构造没有贡献的样本其对应的(α_i^* - α_i)为零在预测时直接被忽略。这带来了模型稀疏性的好处使得预测阶段的计算效率很高尤其是在支持向量数量远小于总样本数时。参数b可以通过任意一个满足0 α_i C 或 0 α_i^* C的支持向量计算得出b y_i - Σ_{j1}^{n} (α_j^* - α_j) K(x_j, x_i) - ε 或 ε取决于对应的约束。在实际的SMO等序列最小优化算法中b值会在迭代过程中被稳定地估计出来。4. 核函数打开非线性回归大门的钥匙如果你处理的数据输入特征和输出目标之间是简单的线性关系那么线性SVR即使用线性核函数可能就足够了。但现实世界的数据关系往往错综复杂这时就需要请出SVR以及SVM家族的“魔法道具”——核函数。核函数的作用是让我们能够在原始的低维输入空间中直接计算样本在高维特征空间中的内积即K(x_i, x_j) φ(x_i)·φ(x_j)而无需显式地知道映射函数φ(x)的具体形式也无需真正进行高维向量的计算。这个技巧被称为“核技巧”它巧妙地规避了“维数灾难”使得SVR能够高效地处理非线性回归问题。常用的核函数主要有以下几种选择哪一种取决于你的数据特性和先验知识线性核K(x_i, x_j) x_i·x_j。这就是没有进行非线性映射的情况适用于特征与目标之间近似线性关系的数据集。它的优点是参数少几乎不需要调计算速度快模型可解释性强。多项式核K(x_i, x_j) (γ x_i·x_j r)^d。其中d是多项式的次数γ、r是系数。多项式核可以将数据映射到特征空间中的多项式组合上。当d较小时它可以捕捉一定的非线性但阶数d太高容易导致数值计算不稳定如内积值过大或过小和过拟合。径向基函数核也叫高斯核K(x_i, x_j) exp(-γ ||x_i - x_j||²)。这是最常用、最强大的核函数之一。γ参数控制了单个样本的影响范围γ越大高斯分布越“瘦高”模型越复杂每个支持向量的影响范围越小容易过拟合γ越小分布越“扁平”模型越平滑容易欠拟合。RBF核理论上可以将数据映射到无限维空间具有非常强的非线性拟合能力。Sigmoid核K(x_i, x_j) tanh(γ x_i·x_j r)。形式上类似于神经网络中的激活函数。但在实际应用中由于其不一定满足Mercer定理即不一定对应某个特征空间的内积可能导致优化问题非正定所以用得相对较少。实操心得核函数选择指南在没有先验知识时RBF核通常是默认的起点因为它灵活且强大。可以从RBF核开始尝试如果效果不佳再考虑线性核当怀疑关系是线性或近似线性时或多项式核当你知道或假设关系是多项式形式时。选择核函数后重点就变成了调优其参数如RBF的γ以及模型本身的C和ε。5. 超参数详解C、ε、γ与模型性能的三角关系调参是使用SVR乃至任何机器学习模型无法绕过的一环。SVR的核心超参数就是三个惩罚系数C、不敏感损失参数ε以及核参数以RBF核的γ为例。它们共同决定了模型的偏差-方差权衡理解它们的影响至关重要。惩罚系数 C作用权衡模型复杂度与训练误差。C越大对松弛变量的惩罚越大模型越倾向于减少训练误差即尽可能让更多点进入ε管道这可能导致模型更复杂w的范数可能更大过拟合风险增加。C越小则更倾向于选择一个平坦的模型允许更多的训练误差欠拟合风险增加。影响C主要控制模型的“拟合力度”。你可以把它想象成模型的“倔强程度”。一个倔强的模型C大会努力记住每一个训练样本的细节而一个随和的模型C小则更关注整体趋势。典型取值范围通常在一个对数尺度上搜索如[0.001, 0.01, 0.1, 1, 10, 100, 1000]。对于数据尺度差异大的情况需要结合数据标准化来考虑。不敏感损失参数 ε作用定义回归估计的精度要求。ε越大管道越宽对误差越不敏感模型越简单支持向量可能越少预测函数更平坦。ε越小管道越窄要求预测越精确模型可能更复杂支持向量可能更多。影响ε直接控制了模型的“精度要求”。它和C存在交互一个大的ε宽管道本身就会让模型更简单此时即使C较大模型也可能不会太复杂反之一个小的ε窄管道要求高精度如果C也小模型可能无法达到要求的精度训练误差会很大。设置技巧ε的取值与目标变量y的尺度密切相关。一个经验法则是可以先看看y值的范围或标准差。有时也会将ε设置为0这时SVR就退化为追求尽可能最小化绝对误差在L1损失意义上的模型。在实际应用中如果对预测误差的分布没有先验知识可以通过交叉验证来选择合适的ε。RBF核参数 γ作用定义了单个训练样本的影响范围。γ越大高斯核越“窄”样本的影响范围越小只有非常近的样本点才会被显著影响决策边界会变得非常曲折复杂容易过拟合。γ越小核越“宽”样本的影响范围越大决策边界更平滑容易欠拟合。影响γ控制了模型的“局部性”与“全局性”。大γ意味着“局部模型”小γ意味着“全局模型”。与C的交互γ和C共同控制模型复杂度。一个大的γ复杂核配一个大的C强拟合几乎必然导致过拟合。一个小的γ平滑核配一个小的C强正则化则很可能欠拟合。通常需要在两者之间寻找平衡。这三个参数构成了一个三维的调参空间。常见的策略是使用网格搜索结合交叉验证。例如对于RBF核SVR我们通常对(C, γ, ε)进行组合搜索。由于搜索空间可能很大也可以先使用粗网格确定大致范围再在 promising 的区域进行精细搜索。6. 实战演练用Python实现SVR房价预测理论说了这么多不动手试试总是隔靴搔痒。我们用一个经典的波士顿房价数据集虽然由于其伦理问题已不推荐使用但作为教学示例其规模和小样本特性很符合SVR的应用场景这里我们使用sklearn中类似的合成数据集或改用加利福尼亚房价数据集来演示SVR的全流程。我们将使用scikit-learn库它是Python中最流行的机器学习库之一。6.1 环境准备与数据加载首先确保你的环境安装了必要的库scikit-learn,numpy,pandas,matplotlib。我们可以用加利福尼亚房价数据集。import numpy as np import pandas as pd from sklearn.datasets import fetch_california_housing from sklearn.model_selection import train_test_split, GridSearchCV from sklearn.preprocessing import StandardScaler from sklearn.svm import SVR from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score import matplotlib.pyplot as plt # 加载数据 california fetch_california_housing() X california.data y california.target feature_names california.feature_names # 查看数据基本信息 print(f数据集形状: X{X.shape}, y{y.shape}) print(f特征名: {feature_names}) print(f目标值房价中位数范围: [{y.min():.2f}, {y.max():.2f}])6.2 数据预处理与探索SVR对数据尺度比较敏感特别是使用RBF核或多项式核时因为核函数基于特征向量间的距离或内积。因此标准化是一个关键步骤。# 划分训练集和测试集 X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.2, random_state42) # 特征标准化注意先拟合训练集再转换训练集和测试集 scaler_X StandardScaler() X_train_scaled scaler_X.fit_transform(X_train) X_test_scaled scaler_X.transform(X_test) # 目标变量是否需要标准化对于SVR如果ε是绝对值标准化y会影响ε的物理意义。 # 一种常见做法是也标准化y并在预测后反标准化。这里为了ε的直观性我们暂时不标准化y。 # 但我们可以观察y的分布 scaler_y StandardScaler() y_train_reshaped y_train.reshape(-1, 1) y_test_reshaped y_test.reshape(-1, 1) scaler_y.fit(y_train_reshaped) # 我们先使用原始y后续在调参时考虑ε的取值与y尺度的关系。6.3 模型训练与基线测试我们先使用默认参数训练一个RBF核的SVR建立一个性能基线。# 使用默认参数的SVR (RBF核) svr_baseline SVR(kernelrbf) # 默认C1.0, epsilon0.1 svr_baseline.fit(X_train_scaled, y_train) # 预测 y_pred_baseline svr_baseline.predict(X_test_scaled) # 评估 mse_baseline mean_squared_error(y_test, y_pred_baseline) mae_baseline mean_absolute_error(y_test, y_pred_baseline) r2_baseline r2_score(y_test, y_pred_baseline) print(基线模型 (默认参数) 性能:) print(f 均方误差 (MSE): {mse_baseline:.4f}) print(f 平均绝对误差 (MAE): {mae_baseline:.4f}) print(f 决定系数 (R²): {r2_baseline:.4f}) print(f 支持向量数量: {svr_baseline.support_.shape[0]})6.4 超参数调优网格搜索交叉验证默认参数往往不是最优的。我们使用GridSearchCV来系统性地搜索最佳参数组合。考虑到计算成本我们选择一个相对较小的网格。# 定义参数网格 param_grid { C: [0.1, 1, 10, 100], # 惩罚系数 epsilon: [0.01, 0.1, 0.5, 1], # 不敏感损失参数参考y的尺度房价单位是万美元 gamma: [scale, auto, 0.01, 0.1] # RBF核参数scale是1/(n_features * X.var()) } # 创建SVR模型 svr SVR(kernelrbf) # 创建GridSearchCV对象使用5折交叉验证以负均方误差作为评分标准sklearn要求最大化 grid_search GridSearchCV(estimatorsvr, param_gridparam_grid, cv5, scoringneg_mean_squared_error, # 负MSE越大越好 verbose1, n_jobs-1) # 使用所有CPU核心 # 在训练集上执行网格搜索 grid_search.fit(X_train_scaled, y_train) # 输出最佳参数和最佳得分 print(最佳参数组合: , grid_search.best_params_) print(最佳交叉验证分数 (负MSE): , grid_search.best_score_) # 注意best_score_是交叉验证的平均分且是负MSE所以数值越小负得越多越好但这里是“负的”所以越大越好。 best_mse_cv -grid_search.best_score_ print(f对应的最佳交叉验证MSE: {best_mse_cv:.4f}) # 获取最佳模型 best_svr grid_search.best_estimator_6.5 最终模型评估与可视化用找到的最佳模型在测试集上进行最终评估并可视化预测结果。# 用最佳模型预测测试集 y_pred_best best_svr.predict(X_test_scaled) # 评估最佳模型 mse_best mean_squared_error(y_test, y_pred_best) mae_best mean_absolute_error(y_test, y_pred_best) r2_best r2_score(y_test, y_pred_best) print(\n调优后模型性能:) print(f 测试集均方误差 (MSE): {mse_best:.4f}) print(f 测试集平均绝对误差 (MAE): {mae_best:.4f}) print(f 测试集决定系数 (R²): {r2_best:.4f}) print(f 支持向量数量: {best_svr.support_.shape[0]} / {X_train.shape[0]}) # 与基线模型对比 print(\n性能提升:) print(f MSE降低: {(mse_baseline - mse_best) / mse_baseline * 100:.2f}%) print(f R²提升: {r2_best - r2_baseline:.4f}) # 可视化预测值 vs 真实值散点图 plt.figure(figsize(8, 6)) plt.scatter(y_test, y_pred_best, alpha0.6, edgecolorsk) plt.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], r--, lw2, label理想线 yx) plt.xlabel(真实房价) plt.ylabel(预测房价) plt.title(SVR模型预测结果散点图) plt.legend() plt.grid(True, linestyle--, alpha0.7) plt.show() # 可视化误差分布直方图 errors y_test - y_pred_best plt.figure(figsize(8, 5)) plt.hist(errors, bins30, edgecolorblack, alpha0.7) plt.xlabel(预测误差 (真实值 - 预测值)) plt.ylabel(频数) plt.title(预测误差分布直方图) plt.axvline(x0, colorr, linestyle--, label零误差线) plt.axvline(xnp.mean(errors), colorg, linestyle-, labelf均值: {np.mean(errors):.3f}) plt.legend() plt.grid(True, linestyle--, alpha0.7, axisy) plt.show()通过这个完整的流程你可以清晰地看到从数据加载、预处理、基线模型建立、参数网格搜索到最终评估和可视化的每一步。调参后模型的性能提升通常会非常明显这正体现了理解并优化C、ε、γ的重要性。7. SVR的优缺点与适用场景分析没有放之四海而皆准的模型SVR也不例外。了解其长处和短板能帮助你在正确的地方使用它。优点泛化能力强基于结构风险最小化原则在样本量不是特别大的情况下往往能表现出较好的泛化性能不易过拟合。非线性能力强大通过核技巧可以高效地处理复杂的非线性回归问题无需手动进行特征工程构造非线性特征。稳健性ε-不敏感损失函数使其对管道内的噪声和微小扰动不敏感模型更稳健。稀疏解解仅由支持向量决定预测时只需计算与支持向量的核函数对于大规模数据支持向量占比小时预测速度有优势。全局最优解优化问题是凸二次规划能保证找到全局最优解避免了神经网络等模型可能陷入局部最优的问题。缺点计算和存储开销大训练阶段需要求解二次规划问题时间复杂度通常在O(n²)到O(n³)之间对于大规模训练集如十万、百万级样本训练速度会非常慢内存消耗也大。虽然有一些针对大规模数据的优化算法如LIBSVM中的序列最小优化SMO算法但相比线性模型、决策树等其训练成本依然较高。参数调优敏感性能高度依赖于核函数的选择以及超参数(C, ε, γ)的设置。调参过程需要经验和计算资源如网格搜索交叉验证。概率解释缺乏标准的SVR是一个确定性模型它直接输出点估计不提供预测值的概率分布或置信区间。这对于需要不确定性度量的场景是个短板。核函数与参数选择依赖经验虽然RBF核很通用但并非永远最优。核函数的选择和参数设置缺乏严格的理论指导更多依赖于实验和验证。适用场景中小规模数据集样本数量在几千到几万之间特征维度可能从几十到几百甚至上千。这是SVR最能发挥其泛化优势的舞台。特征维度高于样本数例如在生物信息学、文本挖掘的一些场景中SVR表现往往不错。非线性关系明显且关系不易参数化当你怀疑数据背后存在复杂非线性关系但又难以用具体的函数形式如多项式、指数描述时SVR的核方法提供了强大的拟合能力。对预测精度有明确容忍度要求ε参数让你可以直观地设定可接受的误差范围这在某些工业控制或质量控制应用中很有用。不适用场景超大规模数据集训练成本过高。需要概率预测或置信区间的场景可以考虑高斯过程回归或其他贝叶斯方法。对模型可解释性要求极高的场景相比线性回归或决策树SVR模型特别是使用非线性核时的可解释性较差是个“黑箱”。8. 常见问题、调参技巧与避坑指南在实际使用SVR的过程中你肯定会遇到各种各样的问题。下面我整理了一些常见坑点和应对技巧很多都是我在项目里踩过坑才总结出来的。问题1训练速度太慢怎么办可能原因样本量过大参数网格搜索范围太广太密核函数选择不当如用了高次多项式核。解决技巧缩减样本对于海量数据可以先使用一个随机子样本进行初步的模型选择和参数调优。使用线性核如果问题近似线性线性核SVR的训练速度远快于非线性核。使用更高效的求解器scikit-learn的SVR默认使用LIBSVM的算法。可以尝试调整cache_size参数增大缓存可能加速。对于特别大的问题可以考虑使用专门优化过的库或者使用LinearSVR线性核SVR的专用实现速度更快。聪明地调参先在大范围对数尺度上进行粗网格搜索锁定最佳参数的大致区域再在该区域进行精细搜索。问题2模型总是欠拟合训练集和测试集误差都很大怎么调诊断观察学习曲线。如果训练误差本身就很高就是欠拟合。调参方向增大C降低对模型复杂度的惩罚让模型更有能力去拟合数据。减小ε提高精度要求迫使模型去拟合更细的细节。调整核参数使其更复杂对于RBF核增大γ使每个样本的影响范围更局部化模型能力更强。对于多项式核可以尝试增加次数d。检查特征是否遗漏了重要特征是否需要构造更有意义的特征组合或交互项问题3模型过拟合训练集误差很小测试集误差很大怎么调诊断训练误差远小于测试误差。调参方向减小C增加正则化强度约束模型复杂度防止它过于“记忆”训练数据。增大ε放宽精度要求允许更宽的管道让模型变得更平滑、更简单。调整核参数使其更平滑对于RBF核减小γ使样本的影响范围更广模型更平滑。对于多项式核减小次数d。获取更多数据如果可能增加训练样本是缓解过拟合最有效的方法之一。特征选择移除不相关或冗余的特征降低模型复杂度。问题4如何为ε设置一个合理的初始值ε的物理意义是目标变量y的尺度。一个经验法则是观察目标变量y的标准差σ_y或取值范围。可以将ε初始设置为σ_y的一个比例例如0.1 * σ_y。也可以根据业务需求来定比如在预测房价时你认为误差在5000美元以内是可以接受的那么ε就可以设为0.5如果单位是万美元。在调参时可以围绕这个初始值在一个数量级范围内搜索。问题5支持向量数量非常多几乎等于训练样本数正常吗可能原因及对策ε设置得太小管道太窄导致很多样本都成了边界支持向量或管道外的支持向量。尝试增大ε。C设置得太大对误差惩罚太重模型试图把每一个样本都拟合好导致几乎所有样本都成为支持向量。尝试减小C。数据噪声很大或本身就是复杂函数如果数据内在规律非常复杂且噪声小可能需要很多支持向量来刻画。这时需要结合测试集性能判断如果泛化性能好支持向量多也未必是问题。影响支持向量多会导致预测阶段计算变慢因为预测需要计算与新样本和所有支持向量的核函数。一个实用的调参流程建议数据标准化务必进行这对基于距离的核如RBF至关重要。设定ε的初始值基于y的尺度或业务理解。固定ε粗调C和γ使用对数尺度如C: [0.001, 0.01, 0.1, 1, 10, 100], γ: [0.001, 0.01, 0.1, 1, 10]通过交叉验证寻找表现较好的区域。在较好区域细调缩小C和γ的搜索步长。微调ε在找到的较优C和γ附近微调ε如[0.5初始ε, 初始ε, 2初始ε]观察模型性能和稀疏性支持向量数量的变化。最终验证在独立的测试集或通过嵌套交叉验证评估最终模型的泛化性能。最后记住SVR是一个强大的工具但它不是“银弹”。在开始一个回归项目时不妨先从一个简单的线性回归或岭回归模型建立基线然后再尝试SVR。通过对比你才能切实体会到SVR在解决特定问题时的价值。当数据量小、关系复杂时SVR常常能给你带来惊喜而当数据量巨大、关系简单时它可能就不是最经济高效的选择了。理解原理掌握调参明确场景你就能让这个“支持向量机回归”工具在你的项目中发挥出最大的威力。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进