SVM、SVR原理简单介绍

本文介绍了支持向量机(SVM)的核心概念,包括超平面、间隔最大化、硬间隔与软间隔、拉格朗日乘子法、对偶问题以及核函数的作用。通过实例解释了SVM如何在高维空间中找到最佳分类边界,并延伸至支持向量回归(SVR)的概念。

首先第一次做总结,是个好习惯,希望能保持下去。

首先先学习的是支持向量机,下面是超平面的通俗理解。

如下图所示,在二位平面有两组数据,我们想用一条线把它们尽可能分开,另外一个点出现时,我们也可以利用这条线成功判断出它属于哪一边。

如下图所示,当二组数据呈现在三维空间时,根据超平面的定义,需要二维的超平面(即平面)来把它们分开;以此类推更高维的。

下面以二维坐标轴来解释下svm的基本原理。如下图由两个星标数据划出的直线能够很好的分开这两组数据,这两个星标数据称作我们的支持向量。这两条虚线中间的实线即分隔这两组数据的超平面。那为什么会选这两个数据作为支持向量呢?这是由于由这两个数据作为支持向量而构建的两条虚线间(正、负超平面)的间隔(Margin)最大,而间隔越大说明这两组数据的区分度越大,我们区分起来就更容易。

下面给出了三条直线的表达式,值得注意的是,这里不再用y作为纵坐标,用x2更符合这里的标准,以及x3等等.....

对上述三个式子进行适当调整,两边同除c,然后把左边的w1/c变成新的w1,得到下图,正、负超平面一边分别对应着一组数据,中间是决策超平面。

刚才考虑的是比较理想化的情况,如果我们在上图再加上一个不太合群的点,情况会如何呢。这就要谈到我们的软、硬间隔的问题了。如图,硬间隔就是像之前一样,把新来的那个点作为新的支持向量,构建了新的超平面,这样的话间隔会损失很多,不是好的选择;而软间隔则接受了这个点不合群的事实,并尝试用一些手段补救;就像我们做生意,间隔相当于收入,而这个点的脱离相当于损失,我们要同时考虑这两点,让利益最大化。

首先讨论硬间隔。

下面进行一些公式的推导,我们分别进行两组推导。第一次我们在决策超平面上找了两个向量点,相减后得到式子8,由此我们知道向量w会垂直超平面;然后在正、负超平面上分别取一个向量点也相减,进行一番推导后最后得到,间隔L会等于2除去向量w的模;于是为了让间隔最大,我们转而研究让w的模最小。

下面我们开始进行最优化,需要运用到我们微积分的拉格朗日乘子法。首先构建合理的约束条件,在这里我们把上下两组数据提供一个代表其本质的变量y,绿点的y为1,黄点的y为-1,这样的话不管黄点还是绿点,它们的yi*(w*xi+b)大于等于1恒成立。(公式可看下图,文字中向量符号未输入)

随后进行拉格朗日乘子法。将w的模平方后除2,不影响求w的最小值,同时又方便了求导。最后得到了拉格朗日函数L。

对该拉格朗日函数对各变量分别求偏导,得到以下四个式子,根据式子3、4,再结合实际情况会发现每个λ其实会大于等于0,于是得到了我们著名的kkt条件,把这些条件带入回去,我们就能解出最终的决策超平面了。

下面简单介绍下SVM对偶性,它能帮我们对SVM决策超平面进行更方便的求解。首先我们先用一个简单的例子理解一下对偶性的优点。

如下图,我们要求在约束条件x大于等于1的条件下,求解x平方的最小值,我们很容易能够解出当x=1时,f(x)有最小值1;根据对偶性,我们先用拉格朗日乘子法构建了如下新方程(注意根据KKT条件,λ大于0),不同的是,我们把新方程求偏导并令其等于0后,新方程的自变量变成了λ,对q(λ)求极值后,发现当λ为2时,x为1,q(λ)有最小值1;总结一下,相当于f(x)在x=1和q(λ)在λ=2对应着同一种情况,都得到了我们需要的答案。利用这一特性,我们也许能更方便求出决策超平面。

如下图所示,和上面简单例子的原理相似,经过一系列的推导,最右边是关于向量w的函数f(w),他会大于等于它的最优解f(w*),然后结合推导的不等式,得到下图黄色部分式子。然后看到第二张图,我们寻找最优q(λ*)满足如图所示不等式,于是求f(w)最小值转而求q(λ)最大值。然后是一个很重要的强弱对偶的问题,当q(λ*)<f(w*)时我们称之为弱对偶,不是很理想,即f(w)最小值不能完全转而求q(λ)最大值;而当q(λ*)=f(w*)时我们称为强对偶,求f(w)最小值可以完全转而求q(λ)最大值。

看似很简单,但是我们在映射时,就会发现当变量增多时,映射到高维空间的维度是呈指数增长的,计算起来十分困难,这时候就需要核函数(kernel function)了。核函数也是将特征从低维到高维进行转换,但是它是先在低维上进行计算,实际的分类效果表现在高维上。这样,我们就避免了在高维上复杂的计算,仍得到相同的结果。

SVR介绍

SVM和SVR最终都是要最大化间隔,只是最大化间隔的目的稍有区别,因此优化目标均包含 min1/2||w||平方项,具体地:

SVM:使支持向量到超平面间的距离最大(即最大化支持向量与超平面的间隔),换言之,SVC通过最大化间隔使得与超平面间距离最小的样本点尽可能分开。

SVR:使由 ε 指定的误差带包含的数据点最多(即最大化由ε 指定的误差带的几何间隔),换言之,SVR通过最大化间隔使得绝大多数样本点可以包含在超平面周围由 ε指定的误差带之间。

svr分为线性硬间隔SVR、线性软间隔SVR、非线性(映射,核函数)。

主要参考:【数之道】支持向量机SVM是什么,八分钟直觉理解其本质_哔哩哔哩_bilibili

(20 封私信) 为什么支持向量回归的目标也是最小化||w||的平方? - 知乎 (zhihu.com)

<think>嗯,用户想了解SVM回归的原理和概念,还有实现介绍。首先,我需要回忆一下SVM回归的基本知识。SVR是支持向量机在回归问题上的应用,和分类任务不同,它关注的是预测连续值,而不是类别标签。根据之前的引用,SVR的目标是构造一个间隔带,让数据点尽可能落在这个带子内,同时保持模型的简单性。 用户提到了引用里的内容,比如结构风险最小化、ε-insensitive损失函数,还有核技巧的应用。我需要把这些点组织起来,先讲原理,再讲概念,最后实现。要注意使用中文,数学公式用行内的$...$,独立公式用$$...$$。 首先,原理部分要解释SVRSVM分类的区别,重点在于间隔带和损失函数。可能需要提到ε不敏感区域,以及如何通过优化问题找到最优超平面。然后,结构风险最小化是为了平衡模型的复杂度和训练误差,这里要结合引用里的内容。 接下来是核心概念,包括ε-insensitive损失函数、支持向量的定义、核函数的作用,以及正则化参数C的影响。这部分需要引用提到的内容,比如引用2中的ε-insensitive区域,引用3中的容忍范围,引用4中的核函数选择。 然后是数学表达,需要写出优化问题的原始形式和对偶形式,可能要用到拉格朗日乘子。这里要注意公式的正确性,比如目标函数和约束条件。例如,优化目标是最小化权重向量的范数加上惩罚项,约束条件是预测值与真实值的偏差不超过ε加上松弛变量。 实现部分要介绍常用的库,比如scikit-learn,给出代码示例,并解释参数。根据引用5,SVR在sklearn中的使用需要指定kernel参数,比如线性、多项式或高斯核。代码示例需要包括数据生成、标准化、模型训练和预测,以及可视化。 在生成相关问题的时候,需要围绕SVR展开,比如和线性回归的区别、参数选择、核函数的影响、应用场景以及处理异常值的能力。这些问题可以帮助用户进一步深入理解。 需要检查引用是否正确,比如引用2提到SVR的构造间隔带,引用3提到容忍范围,引用5提到核函数的使用。要确保每个引用标识符对应正确的内容,并且在回答中自然地插入。 最后,确保回答结构清晰,分点说明,代码正确,并且符合用户的要求,包括使用正确的中文术语和LaTeX格式。可能还需要检查是否有遗漏的重要概念,比如正则化参数C的作用,或者核技巧如何处理非线性问题。总之,要全面覆盖SVR原理、核心概念、数学表达和实现步骤,同时生成相关的问题供用户进一步探索。</think>### 支持向量机回归(SVR原理及实现 #### 一、SVR核心原理 支持向量回归(SVR)是支持向量机(SVM)在回归问题中的扩展,其目标是通过构造一个$\epsilon$-不敏感区域($\epsilon$-insensitive tube)来拟合数据,而非最小化整体均方误差[^3]。具体原理如下: 1. **间隔带构建**:SVR尝试找到一个函数$f(x)=w^T\phi(x)+b$,使得大部分样本点位于间隔带$f(x) \pm \epsilon$内,$\epsilon$为容忍误差阈值[^2]。 2. **结构风险最小化**:通过最小化权重$w$的范数(控制模型复杂度)和松弛变量$\xi_i,\xi_i^*$(控制训练误差),实现模型复杂度和预测精度的平衡[^1]。 3. **核技巧应用**:通过核函数$\phi(x)$将非线性数据映射到高维空间,使原本线性不可分的数据在高维空间中线性可分[^4]。 #### 二、核心概念解析 | 概念 | 说明 | |------------------|-----------------------------------------------------------------------------------| | $\epsilon$-不敏感损失 | 当预测值与真实值偏差小于$\epsilon$时不计算损失,超出时按线性损失计算[^3] | | 支持向量 | 位于间隔带外或边界上的样本点,决定模型的最优超平面 | | 核函数 | 用于处理非线性关系,常见有高斯核(RBF)、多项式核等[^5] | | 正则化参数$C$ | 控制松弛变量惩罚强度,$C$越大对误差容忍度越低,可能过拟合;$C$小则模型更简单[^4] | #### 三、数学表达 原始优化问题: $$ \begin{aligned} \min_{w,b,\xi} & \quad \frac{1}{2}\|w\|^2 + C\sum_{i=1}^n (\xi_i + \xi_i^*) \\ \text{s.t.} & \quad y_i - w^T\phi(x_i) - b \leq \epsilon + \xi_i \\ & \quad w^T\phi(x_i) + b - y_i \leq \epsilon + \xi_i^* \\ & \quad \xi_i,\xi_i^* \geq 0 \end{aligned} $$ #### 四、Python实现示例 ```python from sklearn.svm import SVR from sklearn.preprocessing import StandardScaler import numpy as np import matplotlib.pyplot as plt # 生成示例数据 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]) # 标准化 scaler = StandardScaler() X_scaled = scaler.fit_transform(X) # 训练SVR模型(使用RBF核) model = SVR(kernel='rbf', C=1.0, epsilon=0.1) model.fit(X_scaled, y) # 预测及可视化 X_test = np.linspace(0, 5, 100).reshape(-1, 1) X_test_scaled = scaler.transform(X_test) y_pred = model.predict(X_test_scaled) plt.scatter(X, y, color='darkorange', label='data') plt.plot(X_test, y_pred, color='navy', lw=2, label='SVR prediction') plt.fill_between(X_test.ravel(), y_pred - model.epsilon, y_pred + model.epsilon, alpha=0.2, color='blue') plt.legend() plt.show() ``` #### 五、参数选择建议 1. **核函数选择**:线性数据用`linear`,非线性用`rbf`或`poly`(需调整`degree`参数)[^5] 2. **$\epsilon$设定**:根据数据噪声水平调整,噪声大时适当增大 3. **正则化参数$C$**:通过交叉验证选择,通常范围$10^{-3}$到$10^3$
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值