C_SVC推导(经典的SVM模型)

本文详细介绍了C_SVC模型的数学推导过程,包括硬间隔和软间隔的支持向量机优化问题,拉格朗日对偶性及KKT条件的应用,并深入探讨了SMO算法的实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C_SVC推导

1. 模型假设

假设现在有训练数据X,是mn的矩阵,m是样本数量,n是样本向量的维数,记样本中第i个样本为x(i),标签为y(i),y{+1,1}
现在考虑二分类问题,样本的标签为y⃗ ,是m1的向量。
目的,找到一个最优的相关面,以方程w⃗ x⃗ +b=0表示,其中w⃗ 是一个n1维向量,按照线性代数的记号,记为:
wTx+b=0
|wTx(i)+b|为第i个点到分离面的距离,γ^(i)=y(i)(wTx(i)+b),为函数间隔,对于所有的样本γ^(i)>=0,因为y(i)wTx(i)+b符号相同,找到这样一个分离面,使得所有样本到分离面的距离最大,即是任务所在。
为了归一化表示,因为wb的成比例变化,并不影响分离面的位置,因此要归一化。γ(i)=y(i)(wT||w||x(i)+b||w||)记为几何间隔。
几何间隔的最小值为
γ=minwγ(i)

2. 优化问题

任务为,找到最优的w使得最下的几何间隔最大:
maxwγ s.t.y(i)(wTx(i)+b)>=γ
等价于
maxwγ^||w|| s.t.y(i)(wT||w||x(i)+b||w||)>=γ||w||

maxws.t.γ^||w||y(i)(wTx(i)+b)>=γ^

γ^=1且最大化1||w||等价于最小化12||w||2
最终,优化问题化为:

minw12||w||2 s.t.y(i)(wTx(i)+b)>=1

3. 软间隔

样本有可能不会完全能硬性区分,存在噪点,在正负样本之间相互渗透,要允许软性区分。利用正则化,放松一个点到分离面的距离的约束,即函数间隔γ^=y(i)(wTx(i)+b)>=1ξ(i),但是每放松一个ξ(i)就要支付一个代价Cξ(i),则优化函数变成
minw12||w||2+Cmi=1ξ(i) s.t.y(i)(wTx(i)+b)>=1ξ(i) ξ(i)>=0

4. 拉格朗日对偶和KKT条件

4.1 导出对偶形式

假设有如下问题
minwf(w) s.t.gi(w)<=0 hi(w)=0
有一组α>=0,β>=0,组成拉格朗日函数形式
L(w,α,β)=f(w)+mi=1αigi(w)+mi=1βihi(w)
在满足原问题的约束条件下,有
f(w)=maxα,βL(w,α,β)
原问题化为
minwmaxα,βL(w,α,β)
注意wα,β的位置和顺序

考虑对偶问题minwL(w,α,β)<=L(w,α,β)
而原等价问题中maxα,βL(w,α,β)>=L(w,α,β)

d=maxα,βminwL(w,α,β)<=minwmaxα,βL(w,α,β)=p
即对偶问题恒小于等于原问题
可以看出,在某些条件下是可以取等号的

4.2 kkt的必要性证明

假设现在有最优解使得d=p,(w=w,α=α,β=β),拉格朗日函数恒为凸函数,即最优解定在原空间导数为零的位置取得。
有:

f(w)=minwL(w,α,β)=<=<=minwf(w)+i=1mαigi(w)+i=1mβihi(w)f(w)+i=1mαigi(w)+i=1mβihi(w)f(w)

则不等式取等号,由倒数第二行有:
wf(w)=0αigi(w)=0gi(w)<=0αi>=0(stationarity)(complementaryslackness)(primalfeasibility)(dualfeasibility)

对偶互补条件是由于gi(w)<=0αi>=0αigi(w)=0,由于每一项都小于等于0,要取得和等于零,只能是每一项都等于0.

4.3 kkt的充分性证明

假设现在有(w=w,α=α,β=β)满足kkt条件:
有:

f(w)==f(w)+i=1mαigi(w)+i=1mβihi(w)minwL(w,α,β)

那么,d=maxα,βminwL(w,α,β)=maxα,βf(w)=minwf(w)=p

5.软间隔的对偶表达

含有软间隔的问题为:
minw12||w||2+Cmi=1ξ(i) s.t.y(i)(wTx(i)+b)>=1ξ(i) ξ(i)>=0
拉个朗日函数:

L(w,ξ,α,β)=12||w||2+Ci=1mξ(i)+i=1mα(i)i=1mα(i)ξ(i)i=1mα(i)y(i)(wTx(i)+b)μ(i)ξ(i)

求kkt条件:
wL(w,ξ,α,β)=wmi=1α(i)y(i)x(i)=0
bL(w,ξ,α,β)=mi=1α(i)y(i)=0
ξL(w,ξ(i),α,β)=Cα(i)μ(i)=0
α(i)(1ξ(i)y(i)(wTx(i)+b))=0
μ(i)>=0
α(i)>=0
以上的拉个朗日均不显示的写出b,带入拉格朗日函数得:
L(w,ξ,α,β)=12mi=0mj=0α(i)α(j)y(i)y(j)x(i)Tx(j)+mi=1α(i)
优化问题就变成了:
minα12mi=0mj=0α(i)α(j)y(i)y(j)x(i)Tx(j)mi=1α(i) s.t.0<=α(i)<=C mi=1α(i)y(i)=0

上面的kkt条件中,g(w)=1ξ(i)y(i)(wTx(i)+b),表示点到分离面的最大函数间隔
由对偶互补条件α(i)g(i)(w)=0,如果α(i)>0g(i)(w)=0,那么α(i)对应的点是支撑向量,应当保留下来。当α=0时,则是否为支撑向量均已无意义,在求和中不影响,所以不必记录。

6. 核函数

核函数即选择函数K(x,y)=ϕ(x)Tϕ(y),其中ϕ(x)为从n维空间到另一个空间的映射,核函数表示映射后的点积。核函数的引入是为了解决非线性分割的问题,径向基核如高斯核用泰勒展开理论上可以映射到无限维上去。
将核函数带入上面的待优化方程中,写为:
minα12mi=0mj=0α(i)α(j)y(i)y(j)K(x(i),x(j))mi=1α(i) s.t.0<=α(i)<=C mi=1α(i)y(i)=0

7 经典SMO算法

将待优化的函数视为一个二元函数,假设现在要优化α(1)α(2),为了方便α均用下标,可以写为:

minα1α2s.t.ψ(α1,α2)=12α21K11+12α22K22+α1α2y1y2K12(α1+α2)+α1y1v1+α2y2v2+constant0<=α1<=C,0<=α2<=Cv1=i=3mαiyiK1i,v2=i=3mαiyiK2iα1y1+α2y2=ζ=i=3mαiyi

α1=y1(ζα2y2)带入,注意yiyi=1
得 :
ψ(α2)=12(ζy2α2)2K11+12α22K22+(ζy2α2)α2y2K12 (y1ζy1y2α2+α2)+(ζα2y2)v1+α2y2v2
求导得:
ψα2=(K11+K222K12)αζy2K11+ζy2K12+y1y21y2v1+y2v2=0
这里的α2即是优化后的α2,记为αnew2
此时依照kkt条件,可以得出决策函数为f(x)=mi=1αiyiK(xi,x)+b
可得:
v1=f(x1)α1y1K11α2y2K12b v2=f(x2)α1y1K12α2y2K22b
定义Ei=f(xi)yi
E1=f(x1)y1
E2=f(x2)y2
带入ψα2
最后得:
αnew2=αold2+y2(E1E2)K11+K222K22
检查约束条件,当y1=y2,α1+α2=k,k=±ζ,
α1=0上截距H=min(C,α1+α2)
α1=C下截距L=max(0,α1+α2C)
y1y2α1α2=k,k=±ζ
α1=0上截距H=min(C,C+α2α1)
α1=C下截距L=max(0,α2α1)
此时对α2进行截取
αnew2=Hαnew2L,αnew2>=C,0<αnew2<C,αnew2<=0

截取后得
y1αnew1+y2αnew2=y1αold1+y2αold2=ζ
αnew1=αold1+y1y2(αold2αnew2)
更新完α1α2之后,则需要更新b,由于在原问题中,当0<αi<C时,该向量对应着支撑向量,此时不需要放松ξi=0
因此有yi(f(x))=1,即yj(mi=1αiyiK(xi,xj)+b)=1
若j=1
b=bnew1=y1mi=3yiαiKi1α1y1K11α2y2K12
E1=mi=3αiyiKi1+αold1y1K11+αold2y2K12+boldy1带入上式,得
b=bnew1=E1y1(αnew1αold1)K11y2(αnew2αold2)K12+bold
若j=2
b=bnew2=y2mi=3αiKi2α1K12α2K22
b=bnew2=E2y1(αnew1αold1)K12y2(αnew2αold2)K22+bold
若同时满足约束,则上面两式子相等,将α1α2带入即可得
若都不满足约束,即都在边界上取得,Patt的原文说在b1b2之间的数都满足kkt条件,故取bnew1+bnew22,因为当
αi=0有kkt条件yj(mi=1αiyiK(xi,xj)+b)>=1==>yjEj>=0
αi=C有kkt条件yj(mi=1αiyiK(xi,xj)+b)<=1==>yjEj<=0,也可以用函数间隔来理解,当αi=0时远离分离面,函数间隔大于等于1,当等于C的时候超过了分离面,函数间隔必然小于等于1.
证明方法,将αnew1αnew2分别以αold1λy1E1E2ηαold2+λy2E1E2η替代。λ[0,1)表示剪辑后的系数,带入bnew=tbnew1+(1t)bnew2中,再联立b1,b2的公式和更新E的公式得:
{Enew1=(1t)(1λ)(E1E2) Enew2=t(1λ)(E1E2)
然后将α1α2y1y2的各种情况代入讨论,最后都是满足KKT条件的
<think>好的,我现在需要解决用户提到的SVM模型初始化为空的问题。首先,我得理解这个问题出现的可能原因。用户可能在训练或使用SVM模型时遇到了模型未被正确初始化的情况,导致无法进行预测或其他操作。接下来,我需要根据已有的知识和参考资料来分析可能的原因和解决方案。 根据引用[2],SVM原本是用于二分类的,但通过一些方法可以扩展到多分类。不过这里的问题是关于模型初始化为空,可能和参数设置、数据预处理或训练过程有关。另外,引用[5]提到了粒子群优化SVM用于回归分析,其中涉及数据归一化和反归一化的步骤,这提示数据预处理可能是一个关键点。 首先,考虑数据预处理的问题。如果输入数据包含缺失值、非数值特征或数据未归一化,可能导致模型无法正确训练,进而模型参数未初始化。例如,SVM对数据尺度敏感,未归一化的数据可能使得特征权重不一致,影响模型训练。 其次,模型参数设置不当也可能导致问题。例如,SVM中的正则化参数C、核函数类型(如线性、RBF)等如果没有正确设置,可能导致模型无法收敛,或者在训练过程中出现错误,使得模型保持为空状态。 另外,训练样本的问题也不容忽视。如果训练数据量太少,或者类别标签不均衡,特别是二分类问题中某一类样本过少,可能导致模型无法有效学习,从而未能生成有效的支持向量,使模型为空。 接下来,我需要逐一分析这些可能的原因,并提供对应的解决方案。例如,检查数据预处理步骤,确保数据清洗、归一化;验证模型参数是否正确设置;确保训练数据充足且格式正确。 同时,结合引用[4]中提到的一阶条件和决策边界,说明即使数学上不完美,SGD仍能推导出有效模型。这可能意味着在参数优化过程中,即使存在一些不完美,正确的设置仍能生成有效模型,进一步强调参数调整的重要性。 最后,总结解决方案步骤,并生成相关问题,帮助用户进一步排查问题,比如数据检查、参数调优方法等。</think>### SVM模型初始化为空的解决方案 当SVM模型初始化后仍为空时,通常由以下原因导致: --- #### 1. **数据预处理问题** - **可能原因** - 输入数据包含缺失值或非数值特征(如文本未编码) - 数据未归一化(SVM对数据尺度敏感,需统一量纲) - 特征矩阵维度不一致(如训练和测试集特征数不同) - **解决方案** - 清洗数据:移除缺失样本或填充缺失值 - 归一化处理:使用如`StandardScaler`对数据标准化,公式为: $$x_{\text{norm}} = \frac{x - \mu}{\sigma}$$ 其中$\mu$为均值,$\sigma$为标准差[^5] - 检查特征维度:确保训练和预测时输入维度一致 --- #### 2. **模型参数设置错误** - **可能原因** - 未正确选择核函数(如线性核`kernel='linear'`或RBF核`kernel='rbf'`) - 关键参数(如正则化参数$C$、RBF核的$\gamma$)未合理赋值 - **解决方案** - 显式设置参数:例如在Scikit-learn中初始化模型时指定参数 ```python from sklearn.svm import SVC model = SVC(kernel='rbf', C=1.0, gamma='scale') # 必须明确赋值 ``` - 参数调优:使用网格搜索(`GridSearchCV`)优化超参数 --- #### 3. **训练样本问题** - **可能原因** - 训练数据量过少(如样本数小于特征数) - 类别标签全为同一类(二分类任务中标签未正确分配) - **解决方案** - 增加样本量或使用过采样技术(如SMOTE) - 检查标签分布:确保至少存在两个类别(二分类) --- #### 4. **代码实现错误** - **可能原因** - 未调用`fit()`方法训练模型直接预测 - 模型保存与加载错误(如序列化失败) - **解决方案** - 按流程执行:先训练后预测 ```python model.fit(X_train, y_train) # 必须执行fit y_pred = model.predict(X_test) ``` - 检查模型持久化:使用`pickle`或`joblib`保存/加载完整模型 --- ### 总结步骤 1. 检查输入数据是否完整、已归一化 2. 验证模型参数是否显式赋值 3. 确保训练数据量足够且标签有效 4. 按正确流程调用训练和预测方法 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值