SVM支持向量机

server/2025/1/18 4:39:05/

目录

算法原理

数学基础

向量内积(向量点乘)

范数

对偶问题

拉格朗日乘子法

​线性可分与线性不可分

线性可分

线性不可分

超平面

超平面的定义

超平面的作用

如何寻找最优的超平面

损失函数求解

软间隔

鲁棒性

核函数

算法优缺点

优点

缺点

算法API


算法原理

数学基础
向量内积(向量点乘)

两个向量的内积表示一个向量在另一个向量上的投影长度乘以另一个向量的长度。

在线性分类中,内积用于计算样本点到超平面的距离。

更详细的向量内积外积内容向量的内积外积与其几何意义_内积和外积-CSDN博客

范数

范数用于衡量向量的长度或大小。常见的范数有 L1 范数(曼哈顿距离)和 L2 范数(欧几里得距离)。在SVM中,通常使用L2范数来计算间隔。

对偶问题

对于一个原始的优化问题,通过一定的数学变换可以得到另一个相关的优化问题,这个新的优化问题就称为原问题的对偶问题。

对偶问题具有一些良好的性质,比如在某些情况下,求解对偶问题可能比求解原问题更容易,或者通过研究对偶问题可以获得关于原问题的一些有用信息,比如最优解的下界等。

拉格朗日乘子法

用于将有约束的优化问题转化为无约束的优化问题。在 SVM 中,通过引入拉格朗日乘子,将最大化间隔的问题转化为对偶问题进行求解。

线性可分与线性不可分
线性可分

在线性可分的情况下,数据可以通过一个超平面完全分开,使得属于不同类别的样本分别位于超平面的两侧

线性不可分

在线性不可分的情况中,无法找到一个线性超平面将数据完美分开,此时需要引入核函数将数据映射到高维空间,使其在高维空间中变得线性可分。

超平面
超平面的定义

超平面是一个在特征空间中具有特定方程的平面。

对于二维数据,超平面是一条直线;

对于三维数据,超平面是一个平面;

对于更高维度的数据,超平面是一个广义的线性决策边界。

超平面的方程通常表示如下,

其中ω是法向量,决定超平面的方向,b是截距,它决定了超平面与原点的相对位置。具体来说,

当b>0时,超平面向原点的负方向平移;

当b<0时,超平面向原点的正方向平移;

当b=0时,超平面经过原点。

所以, ω与b共同作用,确定了超平面在特征空间中的具体位置和方向。

超平面的作用
  1. 作为分类决策边界,区分不同类别的数据。

  2. 支持向量机中,找到具有最大间隔的超平面,提升模型的泛化和鲁棒性。

  3. 用于数据降维与特征提取。

  4. 作为数学模型中的线性约束条件。

  5. 反映数据分布特征和内在结构。

如何寻找最优的超平面

损失函数求解
软间隔

支持向量机中,“软间隔”(Soft Margin)是对标准硬间隔(Hard Margin)SVM 的一种扩展和改进。

在硬间隔 SVM 中,要求所有的样本点都被正确分类,并且离超平面有一定的间隔。但在实际应用中,数据往往不是完全线性可分的,或者要求严格的硬间隔可能导致过拟合。

软间隔 SVM 允许一些样本点违反间隔约束,即可以位于间隔之内,甚至被错误分类,但会对这些违反约束的样本点引入一定的惩罚。

其中C是一个正的惩罚参数,控制对错误分类和违反间隔的容忍程度。

较大的C值表示对错误分类和违反间隔的惩罚较大,模型更倾向于严格分类;

较小的C值则对错误的容忍度更高,模型更注重整体的泛化能力。

通过软间隔 SVM,可以更好地处理噪声数据和不完全线性可分的情况,提高模型的鲁棒性和泛化能力。

鲁棒性

“鲁棒性”(Robustness)在机器学习和数据处理中,指的是一个系统或模型在面对各种干扰、不确定性、噪声或异常情况时,仍能保持其性能和功能稳定的能力。

可以理解为如果一个模型具有良好的鲁棒性,那么当输入数据有一定程度的变化、误差或异常时,模型的输出结果不会产生过大的偏差或错误,依然能够给出合理和可靠的预测或决策。

例如,对于一个图像识别模型,如果图像有轻微的模糊、光照变化或部分遮挡,具有鲁棒性的模型仍能准确识别出图像中的对象;对于一个预测模型,如果输入数据存在少量的噪声或异常值,鲁棒的模型不会因此产生显著的预测误差。

鲁棒性是评估模型质量和可靠性的一个重要指标,特别是在实际应用中,数据往往不完美,存在各种可能的干扰和变化。

核函数

多项式核函数

高斯核函数

算法优缺点
优点

1.有严格的数学理论支持,可解释性强,不同于传统的统计方法能简化我们遇到的问题。

2.能找出对任务有关键影响的样本,即支持向量。 3.软间隔可以有效松弛目标函数。 4.核函数可以有效解决非线性问题。 5.最终决策函数只由少数的支持向量所确定,计算的复杂性取决于支持向量的数目,而不是样本空间的维数,这在某种意义上避免了“维数灾难”。 6.SVM在小样本训练集上能够得到比其它算法好很多的结果。

缺点

1.对大规模训练样本难以实施。

SVM的空间消耗主要是存储训练样本和核矩阵,当样本数目很大时该矩阵的存储和计算将耗费大量的机器内存和运算时间。超过十万及以上不建议使用SVM。

2.对参数和核函数选择敏感。 支持向量机性能的优劣主要取决于核函数的选取,所以对于一个实际问题而言,如何根据实际的数据模型选择合适的核函数从而构造SVM算法目前没有好的解决方法解决核函数的选择问题。 3.模型预测时,预测时间与支持向量的个数成正比。当支持向量的数量较大时,预测计算复杂度较高。

算法API

class sklearn.svm.SVC(C=1.0, kernel=’rbf’, degree=3, gamma=’auto_deprecated’, 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’, random_state=None)

参数说明:(重要的参数有:C、kernel、degree、gamma)

1.C 惩罚因子【浮点数,默认为1.】【软间隔】

建议通过交叉验证来选择

  • C越大,对误分类的惩罚增大,希望松弛变量接近0,趋向于对训练集全分对的情况,这样对训练集测试时准确率很高,但泛化能力弱;

  • C值小,对误分类的惩罚减小,允许容错,将他们当成噪声点,泛化能力较强。

2.kernel 核函数【默认rbf(径向基核函数|高斯核函数)】

默认情况下选择rbf

3.degree【整型,默认3维】

多项式poly函数的维度,默认是3,选择其他核函数时会被忽略。按默认【选择rbf之后,此参数不起作用】

指上面式子中的n

4.‘rbf’,‘poly’ 和‘sigmoid’的核函数参数。默认是’auto’。建议通过交叉验证来选择

  • 如果gamma是’auto’,那么实际系数是1 / n_features,也就是数据如果有10个特征,那么gamma值维0.1。(sklearn0.21版本)

  • 在sklearn0.22版本中,默认为’scale’,此时gamma=1 / (n_features*X.var())#X.var()数据集所有值的方差。

    • gamma越大,过拟合风险越高

    • gamma越小,过拟合风险越低

5.coef0:核函数中的独立项。多项式的偏置项。它只在’poly’和’sigmoid’中很重要。

6.probability:是否启用概率估计。

允许在模型训练完成后,使用predict_proba方法来预测每个类别的概率,而不是仅仅给出类别的预测结果。

必须在调用fit之前启用它,并且会减慢该方法的速度。

默认为False,按默认即可【选择rbf之后,不起作用】

7.cache_size :核函数cache缓存大小,默认为200MB

不用调整

8.class_weight :类别的权重,字典形式传递。默认’balanced’

按默认设置

一些属性信息:

  1. support_vectors_【支持向量】

->>以数组的形式储存

  1. n_support_【每个类别支持向量的个数】

->>int类型

  1. coef_【参数w】

->>数组的形式储存

  1. intercept_【偏置项参数b】

->>数组的形式储存


http://www.ppmy.cn/server/159259.html

相关文章

运输层安全协议SSL

安全套接字层 SSL (Secure Socket Layer) SSL 作用在端系统应用层的 HTTP 和运输层之间&#xff0c;在 TCP 之上建立起一个安全通道&#xff0c;为通过 TCP 传输的应用层数据提供安全保障。 应用层使用 SSL 最多的就是 HTTP&#xff0c;但 SSL 并非仅用于 HTTP&#xff0c;而是…

Coconut:基于连续潜在空间推理,提升大语言模型推理能力的新方法

Coconut&#xff08;连续思维链&#xff09;提出了一种新的大语言模型推理范式&#xff0c;该范式在潜在空间中进行运算&#xff0c;利用模型隐藏层生成的连续思维状态取代传统的基于文本的推理方式。系统将这些状态以输入嵌入的形式反馈至模型&#xff0c;通过广度优先搜索方法…

macos 一直报错 XXX 将对你的电脑造成伤害。你应该将它移到废纸篓

Docker 将对你的电脑造成伤害。你应该将它移到废纸篓 今天碰到一个神奇的问题&#xff0c;Docker 忽然运行不了了&#xff0c;然后将 Docker 卸载重装&#xff0c;接着就出现了这个问题&#xff0c;电脑一直弹框这个错误&#xff0c;将 Docker 卸载也不行&#xff0c;重启之后就…

深入理解观察者模式 —— Qt信号槽机制的实现

观察者模式是一种行为型设计模式&#xff0c;允许一个对象&#xff08;被观察者&#xff09;状态发生变化时通知一组依赖它的对象&#xff08;观察者&#xff09;&#xff0c;从而实现对象之间的解耦。在这篇文章中&#xff0c;我们将探讨如何用 C 和 Python 实现观察者模式&am…

3、C#基于.net framework的应用开发实战编程 - 实现(三、一) - 编程手把手系列文章...

三、 实现&#xff1b; 三&#xff0e;一、实现数据库操作&#xff1b; 对于数据库的操作&#xff0c;以前都是有ODBC的接口&#xff0c;通过Helper类库进行的操作。此文主要介绍例子里对数据库操作的实现。 1、 SQLiteHelper&#xff1b; SQLite主要是用C编写的&#xff0c;但…

YOLOv8从菜鸟到精通(二):YOLOv8数据标注以及模型训练

数据标注 前期准备 先打开Anaconda Navigator&#xff0c;点击Environment&#xff0c;再点击new(new是我下载anaconda的文件夹名称)&#xff0c;然后点击创建 点击绿色按钮&#xff0c;并点击Open Terminal 输入labelimg便可打开它,labelimg是图像标注工具&#xff0c;在上篇…

微软徽标认证WHQL

什么是微软徽标认证&#xff1f; WHQL认证&#xff0c;也叫Windows徽标认证&#xff0c;是Windows硬件设备质量实验室&#xff08;Windows Hardware Quality Labs&#xff09;的简称。由微软设立的这项认证标准&#xff0c;通过使用微软的测试平台对设备和驱动进行严格的测试&a…

【Rust自学】12.5. 重构 Pt.3:移动业务逻辑

12.5.0. 写在正文之前 第12章要做一个实例的项目——一个命令行程序。这个程序是一个grep(Global Regular Expression Print)&#xff0c;是一个全局正则搜索和输出的工具。它的功能是在指定的文件中搜索出指定的文字。 这个项目分为这么几步&#xff1a; 接收命令行参数读取…