当前位置: 首页 > news >正文

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

支持向量机(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_splitdata = 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)

http://www.lryc.cn/news/620156.html

相关文章:

  • mac下载maven并配置,以及idea配置
  • O2OA:数字化转型中安全与效率的平衡之道
  • 深入理解 uni-app 的 uni.createSelectorQuery()
  • 云电竞游戏盒子技术分析
  • BAW56LT1G ON安森美 双串联开关二极管 电子元器件
  • Linux系统文件完整性检查工具AIDE在生产环境中推送钉钉告警
  • Nginx Stream代理绕过网络隔离策略
  • 雨量系列篇一:翻斗雨量传感器与压电雨量传感器的区别是什么
  • 古诗词多媒体内容生成工作流文档操作流程
  • 杂记 01
  • reactive和ref使用方法及场景
  • 基于通用优化软件GAMS的数学建模和优化分析(GAMS安装和介绍、GAMS程序编写、GAMS程序调试)
  • Python 类元编程(元类基础知识)
  • 正则表达式解析(三)
  • (50)QT 绘图里,视图 QGraphicsView、场景 QGraphicsScene 及图形项 QGraphicsRectItem 的举例
  • Unity:GUI笔记(二)——工具栏和选择网格、滚动列表和分组、窗口、自定义皮肤样式、自动布局
  • 面试实战 问题二十七 java 使用1.8新特性,判断空
  • 机器学习-----DBSCAN算法
  • 电子电气架构 --- 软件项目文档管理
  • mysql的快照读与当前读的区别
  • 云电竞游戏盒子相比传统PC有什么优势?
  • YOLO-v2-tiny 20种物体检测模型
  • Unity中启用DLSS 【NVIDIA】
  • 循序渐进学 Spring (上):从 IoC/DI 核心原理到 XML 配置实战
  • AWS Bedrock Claude模型费用深度分析:企业AI成本优化指南
  • HarmonyOS Navigation路由跳转的完整示例
  • 天猫商品评论API:获取商品热门评价与最新评价
  • 销售数据预处理与分析学习总结
  • 基于UniApp的智能在线客服系统前端设计与实现
  • Github desktop介绍(GitHub官方推出的一款图形化桌面工具,旨在简化Git和GitHub的使用流程)