三种SVM的对偶问题

本文详细介绍了SVM的对偶问题,包括原始SVM模型、加入松弛变量后的对偶问题,以及加核函数SVM的对偶问题。通过对这些问题的探讨,阐述了SVM如何处理线性可分与不可分数据,并在高维特征空间中实现非线性分类。

一、SVM原问题及要变成对偶问题的原因

对于SVM的,我们知道其最终目的是求取一分类超平面,然后将新的数据带入这一分类超平面的方程中,判断输出结果的符号,从而判断新的数据的正负。而求解svm分类器模型,最终可以化成如下的最优化问题:

minw,bs.t.12w21yi(wxi+b)0i=1,2,...,N
上式中, yi 对应样本 xi 的标签。
我们的目的是求出上述最优化问题的最优解, w b ,从而得到分类超平面:
wx+b=0
进而得到分类决策函
f(x)=sign(wx+b)
但是在求解这一最优化问题时,求解较为困难,且对于线性不可分的数据无法得到较好的分类超平面,因此根据拉格朗日对偶性,引进原最优化问题的对偶问题,通过求解对偶问题得到原始问题的最优解。
对偶问题的引进有两个方面,一是对偶问题的求解往往比原问题容易,二是对于线性不可分的数据可以通过加松弛变量、加核函数的方法,将其推广到非线性分类。

二、原始SVM的对偶问题及其求解

原始的SVM模型的原问题如下:

minw,bs.t.12w21yi(wxi+b)0i=1,2,...,N
为方便计算,将范数形式改写成如下形式:
minw,bs.t.12wTw1yi(wxi+b)0i=1,2,...,N
要想求原始问题的对偶问题,首先构造拉格朗日函数入如下:
L(w,b,λ)=12wTw+i=1Nλi[1yi(wTxi+b)]λi0,i=1,2,...,N
上式中的 λi 是拉格朗日乘子。
观察上述式子,可发现
λi[1yi(wTxi+b)]0

所以 L(w,b,λ)12wTw ,即构造的拉格朗日函数是原问题的一个下界。
根据拉格朗日对偶性,原始问题的的对偶问题是极大化极小问题:
maxλminw,bL(w,b,λ)
上式所表达的意思是,先求 L(w,b,λ) w,b 的极小,再求对 λ 的极大。
首先,求 minw,bL(w,b,λ)
我们知道,对于一阶可导函数,其在导数值为0的地方,取到极大或极小值,对于我们构造的拉格朗日函数,其偏导导数为0的点,一定是极小值。故:
0=wL(w,b,λ)=w+i=1Nλi(yixi)w=i=1Nλiyixi0=bL(w,b,λ)=i=1Nλiyi
### 对偶问题的原理 支持向量机(SVM)的核心在于通过最大化分类间隔来寻找最优的分割超平面。在线性可分的情况下,这个问题可以被表述为一个凸二次规划问题。然而,直接求解原始问题在计算上可能较为复杂,尤其是当特征空间维度较高时。因此,引入拉格朗日乘子法将原始问题转化为对偶问题[^2]。 对偶问题的基本思想是利用拉格朗日乘子法将约束条件整合到目标函数中,从而将原始优化问题转换为一个新的优化问题。这个新问题的目标函数仅依赖于输入样本之间的内积运算,而不再需要显式地处理高维特征空间中的数据[^1]。 具体来说,假设训练数据集为 $\{(\boldsymbol{x}_i, y_i)\}_{i=1}^N$,其中 $\boldsymbol{x}_i \in \mathbb{R}^n$ 是第 $i$ 个样本的特征向量,$y_i \in \{+1, -1\}$ 是其对应的类别标签。原始问题的形式如下: $$ \min_{\boldsymbol{w}, b} \frac{1}{2} \|\boldsymbol{w}\|^2 $$ $$ \text{s.t. } y_i (\boldsymbol{w} \cdot \boldsymbol{x}_i + b) \geq 1, \quad i = 1, 2, \dots, N $$ 为了求解该问题,构造拉格朗日函数: $$ L(\boldsymbol{w}, b, \alpha) = \frac{1}{2} \|\boldsymbol{w}\|^2 - \sum_{i=1}^N \alpha_i [y_i (\boldsymbol{w} \cdot \boldsymbol{x}_i + b) - 1] $$ 通过对 $\boldsymbol{w}$ $b$ 求偏导并令其等于零,可以得到: $$ \boldsymbol{w} = \sum_{i=1}^N \alpha_i y_i \boldsymbol{x}_i $$ $$ 0 = \sum_{i=1}^N \alpha_i y_i $$ 将这些结果代入拉格朗日函数,得到对偶问题的目标函数: $$ \max_{\alpha} \sum_{i=1}^N \alpha_i - \frac{1}{2} \sum_{i=1}^N \sum_{j=1}^N \alpha_i \alpha_j y_i y_j (\boldsymbol{x}_i \cdot \boldsymbol{x}_j) $$ $$ \text{s.t. } \alpha_i \geq 0, \quad \sum_{i=1}^N \alpha_i y_i = 0 $$ ### 对偶问题的求解方法 对偶问题的求解主要依赖于数值优化算法,最常用的是序列最小优化(SMO)算法。SMO 算法的基本思想是将大问题分解为多个小问题,并逐个解决这些小问题。每个小问题涉及两个拉格朗日乘子 $\alpha_i$ $\alpha_j$,并通过解析方法求解,避免了传统的数值优化方法所需的矩阵求逆操作,从而提高了计算效率[^2]。 此外,对偶问题的一个重要特性是它只依赖于输入样本之间的内积运算。这一特性使得核技巧(Kernel Trick)得以应用,即将输入样本映射到更高维的空间,使得原本线性不可分的问题变得线性可分。此时,内积运算可以通过核函数 $K(\boldsymbol{x}_i, \boldsymbol{x}_j)$ 来实现,而无需显式地进行高维映射[^1]。 ### 示例代码:使用 Scikit-Learn 进行 SVM 分类 ```python from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.svm import SVC # 加载数据集 iris = datasets.load_iris() X = iris.data[:, :2] # 只取前两个特征以便可视化 y = iris.target # 数据预处理 scaler = StandardScaler() X_scaled = scaler.fit_transform(X) # 划分训练集集 X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.3, random_state=42) # 训练 SVM 模型 svm_model = SVC(kernel='linear', C=1.0, random_state=42) svm_model.fit(X_train, y_train) # 评估模型 accuracy = svm_model.score(X_test, y_test) print(f"Model Accuracy: {accuracy:.2f}") ``` ###
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值