机器学习——svm支持向量机

发布于:2025-08-14 ⋅ 阅读:(17) ⋅ 点赞:(0)

支持向量机(Support Vector Machine,SVM)是一种高效的监督学习算法。它将实例映射为多维空间中的点,每个维度代表一个特征。SVM的核心目标是找到最优的分割线或超平面划分数据集。基于这个分割边界,算法即可对新样本进行准确分类。

一、寻找最优分割平面

在支持向量机(SVM)算法中,寻找最优分类平面是一个关键问题。具体来说,我们需要找到一个能够将两类数据点完美分离的超平面,并且这个超平面要使得两类样本点到该平面的最小距离(即几何间隔)最大化。

计算几何间隔的数学过程如下:

  1. 首先定义线性分类器的决策函数:f(x) = w·x + b
  2. 几何间隔γ的计算公式为:
  3. 我们的优化目标就是最大化最小的几何间隔:

1) 线性可分情况(硬间隔 SVM)​

假设数据是线性可分的,SVM 的目标是找到一个超平面:

w⋅x+b=0

使得所有样本点满足:

yi​(w⋅xi​+b)≥1,∀i

其中:

  • w是权重向量,决定超平面的方向;

  • b是偏置项,决定超平面的位置;

  • yi​∈{−1,+1}是类别标签;

  • ​支持向量​​是距离超平面最近的样本点(即满足 yi​(w⋅xi​+b)=1的点)。

​优化目标​​:

w,bmin​21​∥w∥2

即最小化 ∥w∥,使得间隔(margin)最大化。


​(2) 线性不可分情况(软间隔 SVM)​

如果数据不是完全线性可分(有噪声或重叠),SVM 允许一些样本违反约束,引入​​松弛变量​​ ξi​≥0:

yi​(w⋅xi​+b)≥1−ξi​

优化目标变为:

w,bmin​21​∥w∥2+Ci=1∑n​ξi​

其中:

  • C是​​惩罚参数​​,控制分类错误的容忍度(C越大,分类越严格)。


​(3) 非线性 SVM(核技巧)​

如果数据在原始空间线性不可分,可以使用​​核函数(Kernel)​​将数据映射到高维空间,使其线性可分。

​常见核函数​​:

  • ​线性核​​:K(xi​,xj​)=xi​⋅xj​

  • ​多项式核​​:K(xi​,xj​)=(γxi​⋅xj​+r)d

  • ​高斯核(RBF)​​:K(xi​,xj​)=exp(−γ∥xi​−xj​∥2)

  • ​Sigmoid 核​​:K(xi​,xj​)=tanh(γxi​⋅xj​+r)

​核技巧的优势​​:

  • 无需显式计算高维映射,直接在低维空间计算内积;

  • 适用于复杂非线性分类问题。

硬间隔推导过程

​步骤1:函数间隔与几何间隔的关系​

定义函数间隔(Functional Margin):

几何间隔(Geometric Margin):

​步骤2:尺度不变性的利用​

观察到对(w,b)同比例缩放时,几何间隔不变:

因此可​​固定最小函数间隔为1​​:

此时所有样本满足:

​步骤3:目标函数转化​

原始目标转化为:

为方便优化,改为最小化∣∣w∣∣2(保持单调性且求导更简便):

(系数21​仅为后续求导时消去常数项)

​步骤4:引入约束条件​

最终得到SVM的标准优化形式:


软间隔

在硬间隔 SVM 中,我们要求所有样本满足:

yi​(w⋅xi​+b)≥1,∀i

如果数据线性不可分(存在噪声或重叠),此约束无法成立。因此,引入​​松弛变量(Slack Variables)​​ ξi​≥0,放宽约束:

yi​(w⋅xi​+b)≥1−ξi​
  • ξi​=0:样本正确分类且位于间隔外或边界上。

  • 0<ξi​≤1:样本位于间隔内但分类正确。

  • ξi​>1:样本被错误分类。


​优化目标​

软间隔 SVM 的优化问题结合了​​最大化间隔​​和​​最小化分类错误​​:

​约束条件​​:

其中:

  • 21​∥w∥2:最大化间隔(与硬间隔相同)。

  • C∑ξi​:惩罚分类错误,C是超参数,控制惩罚力度。


​拉格朗日函数​

引入拉格朗日乘子 αi​≥0和 μi​≥0,构造拉格朗日函数:


​KKT 条件​

对 w、b、ξi​求偏导并令其为零:

  1. ​对 w求导​​:

  2. ​对 b求导​​:

  3. ​对 ξi​求导​​:

    由于 μi​≥0,可得:


​对偶问题​

将 KKT 条件代入拉格朗日函数,得到对偶问题:

​约束条件​​:


​支持向量分类​

  • ​支持向量​​:对应 αi​>0的样本。

    • 若 0<αi​<C,则 ξi​=0,样本位于间隔边界上。

    • 若 αi​=C,则 ξi​≥0,样本可能位于间隔内或被错误分类。

  • ​决策函数​​:

    其中 b通过支持向量计算:

二、SVC类(python)

class sklearn.svm.SVC( *, C=1.0, kernel='rbf', degree=3, gamma='scale', coef0=0.0, shrinking=True, probability=False, tol=0.001, cache_size=200, class_weight=None, verbose=False, max_iter=-1, decision_function_shape='ovr', break_ties=False, random_state=None )

 核心参数说明​

参数

类型

默认值

说明

C

float

1.0

正则化参数,控制分类严格性(值越大,分类越严格)。

kernel

str

'rbf'

核函数:'linear''poly''rbf''sigmoid''precomputed'

degree

int

3

多项式核的阶数(仅当 kernel='poly'时有效)。

gamma

float, str

'scale'

核函数系数('scale'=1/(n_features * X.var()), 'auto'=1/n_features)。

coef0

float

0.0

核函数中的独立项(对 poly和 sigmoid核有效)。

probability

bool

False

是否启用概率估计(启用后会降低训练速度)。

tol

float

0.001

优化算法的停止容差。

max_iter

int

-1

最大迭代次数(-1表示无限制)。

decision_function_shape

str

'ovr'

多分类策略:'ovr'(一对多)或 'ovo'(一对一)。


​重要属性​

训练后的 SVC对象会包含以下属性:

属性

说明

support_vectors_

支持向量的坐标(形状:[n_SV, n_features])。

support_

支持向量在训练样本中的索引。

n_support_

每个类别的支持向量数量。

dual_coef_

对偶问题的解(形状:[n_classes-1, n_SV])。

intercept_

决策函数中的偏置项(常数项)。


​主要方法​

方法

说明

fit(X, y)

训练模型(X是特征矩阵,y是标签)。

predict(X)

返回预测的类别标签。

decision_function(X)

返回样本到超平面的距离(置信度)。

predict_proba(X)

返回类别概率(需 probability=True)。

score(X, y)

返回模型在测试集上的准确率。

import pandas as pd
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split



data = pd.read_csv('spambase.csv')

x = data.iloc[:,:-1]
y = data.iloc[:,-1]

x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.2,random_state=0)

svm = SVC(kernel='linear',C=float('inf'))
svm.fit(x_train,y_train)
y_pred = svm.predict(x_test)
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test,y_pred)
print(cm)


网站公告

今日签到

点亮在社区的每一天
去签到