SVM算法的介绍

article/2025/10/1 1:08:17

一、SVM算法的介绍

1.什么是SVM算法?

SVM(Support Vector Machine)是一种常见的监督学习算法,用于进行二分类或多分类任务。它的主要思想是找到一个最优的超平面,将不同类别的样本分隔开

在这里插入图片描述

超平面最大间隔介绍:

在这里插入图片描述

上左图显示了三种可能的线性分类器的决策边界:

虚线所代表的模型表现非常糟糕,甚至都无法正确实现分类。其余两个模型在这个训练集上表现堪称完美。

但是它们的决策边界与实例过于接近,导致在面对新实例时,表现可能不会太好

右图中的实线代表SVM分类器的决策边界,不仅分离了两个类别,且尽可能远离最近的训练实例

2.硬间隔和软间隔
  • 硬间隔

    硬间隔指的是当数据线性可分时,支持向量机通过寻找一个可以完全将不同类别的样本分开的超平面。在硬间隔中,SVM的目标是使所有样本都满足线性约束条件,即样本点距离超平面的距离大于等于一个阈值,通常为1。这意味着所有样本都应该被正确分类,并且没有容忍错误分类的余地。硬间隔适用于数据线性可分的情况,但对于噪声和离群点较多的数据集,可能会导致过拟合。

    当有一个异常值的鸢尾花数据:左图的数据根本找不出硬间隔,而右图最终显示的决策边界与我们之前所看到的无异常值时的决策边界也大不相同,可能无法很好地泛化。

    在这里插入图片描述

  • 软间隔

    软间隔是为了处理线性不可分的情况而引入的概念。当数据线性不可分时,硬间隔会导致无法找到满足线性约束的超平面。软间隔允许一些样本点出现在超平面的错误一侧,通过引入松弛变量(Slack Variable)来允许一定程度的错误分类。软间隔的目标是在尽量保持数据分离的同时,最小化错误分类和松弛变量的总和。软间隔允许一定程度的容忍错误分类,从而增加模型的鲁棒性和泛化能力

    软间隔的引入使得支持向量机可以处理线性不可分的情况,并且对噪声和离群点具有一定的容错能力。然而,软间隔引入了一个新的调节参数C,用于平衡间隔大小和错误分类的权重。较大的C值将更加关注正确分类,而较小的C值将更加容忍错误分类。合理选择C值可以有效控制模型的偏差和方差。

    如下图所示,左边使用了高C值,分类器的错误样本较少,但是间隔也较小;右边使用的低C值,间隔大了很多,但是位于间隔上的实例也更多,看起来右图更加容忍错误分类(泛化效果更好)。

    在这里插入图片描述

总结起来,硬间隔适用于线性可分的数据,要求没有错误分类;软间隔适用于线性不可分的数据,通过引入松弛变量允许一定程度的错误分类。选择硬间隔还是软间隔要根据数据的线性可分性以及噪声和离群点的情况来决定。

3.SVM的基本原理
  1. 数据表示:SVM将每个样本表示为特征向量,并将其映射到一个高维特征空间。在特征空间中,样本通过特征向量表示,每个特征表示一个维度。
  2. 构建超平面:SVM寻找一个最优的超平面,将不同类别的样本分开。超平面是一个维数比样本少一的线性子空间。对于二分类任务,超平面将数据划分为两个类别;对于多分类任务,可以使用多个超平面进行分割。
  3. 最大化间隔:SVM的目标是找到一个能够最大化不同类别样本之间的间隔(即支持向量)的超平面。间隔是指离超平面最近的样本点到超平面的距离。
  4. 核函数:当数据不是线性可分时,SVM可以使用核函数将数据映射到更高维的特征空间,从而使数据线性可分。常用的核函数包括线性核、多项式核和高斯核等。
  5. 模型训练和预测:SVM通过最优化问题来训练模型,通常使用凸优化方法求解。训练完成后,可以用于对新样本进行分类预测。
4.SVM的三种损失函数

在这里插入图片描述

左边的二维图像,横标代表y的值,纵标代表误差。

右边的图像是超平面的图像。

  • 绿色:0/1损失
    • 当正例的点落在y=0这个超平面的下边,说明是分类正确,无论距离超平面多远多近,误差都是0;
    • 当这个正例的样本点落在y=0的上方的时候,说明分类错误,无论距离多远多近,误差都是1;
    • 图像就是上面绿色线。
  • 蓝色:SVM Hinge损失函数
    • 当一个正例的点落在y=1的直线上,距离超平面长度1,那么误差就为0;
    • 当它落在距离超平面0.5的地方,误差就为0.5;
    • 当他落在y=0上的时候,距离超平面为0,误差就为1;
    • 当这个点落在了y=0的上方,被误分到了负例中,距离算出来应该是负的,比如距离为-0.5,那么误差就为1.5;
    • 以此类推,画在二维坐标上就是上图蓝色的那条线。
  • 红色:Logistic损失函数
    • 损失函数的公式为:ln(1+e^(-yi));
    • 当yi=0时,损失等于ln2,这样的话损失函数的图像有点丑,所以我们给损失函数再除以ln2;
    • 这样当yi=0时,损失为1,即损失函数的图像过(0,1)点;
    • 对应的损失函数图像是上面红色的线。

SVM Hinge 损失函数是比较常用的损失函数。

5.什么是核函数?

在支持向量机(SVM)算法中,核函数是一种用于处理非线性问题的技术。它通过将原始特征映射到一个高维特征空间,从而使数据在高维空间中线性可分。

核函数的作用是将原始数据从低维空间映射到高维空间,通过非线性映射使得数据在高维空间中呈现线性可分的特性。在高维空间中,支持向量机可以找到一个超平面来分割不同类别的样本。

在这里插入图片描述

比如左上面这张图,在二维空间中,无法找到一个超平面来分割红色和蓝色样本。但如果把这些数据映射到三维空间中,如右上图所示,此时就可以找到一个超平面来分割这两种数据。

核函数的一般形式为:
K ( x , y ) = φ ( x ) ⋅ φ ( y ) K(x, y) = φ(x)·φ(y) K(x,y)=φ(x)φ(y)
其中,K(x, y) 表示核函数的计算结果,x 和 y 是原始特征空间中的样本点,φ(·) 表示映射函数。

核函数的选择非常重要,不同的核函数会对数据的映射效果和最终的分类结果产生影响。常用的核函数有以下几种:

  1. 线性核函数(Linear Kernel):线性核函数是最简单的核函数,它只进行内积计算,不进行任何映射操作。适用于线性可分问题
  2. 多项式核函数(Polynomial Kernel):多项式核函数将数据映射到高维空间,并使用多项式函数进行计算。它在原始特征的基础上引入了高次项,可以处理一些非线性问题
  3. 高斯核函数(Gaussian Kernel):高斯核函数也称为径向基函数(Radial Basis Function,RBF核函数),它是常用的核函数之一。高斯核函数通过计算样本点与支持向量之间的距离,构建一个类似于高斯分布的权重。它能够有效处理复杂的非线性问题
  4. Sigmoid核函数(Sigmoid Kernel):Sigmoid核函数使用了一个sigmoid函数,可以将数据映射到一个S形曲线上。它可以处理一些非线性可分问题,但在实际中使用较少

选择适当的核函数取决于数据的特性和问题的性质,一般有如下规则

  • 如果特征数量很大,甚至和样本数量差不多时,往往线性可分,这时选用逻辑回归(LR)或者线性核函数
  • 如果特征数量很小样本数量正常,不多也不少,可以选用高斯核函数(RBF)
  • 如果特征数量很小,而样本数量很大,这是可以手动添加一些特征,使得线性可分,然后选用逻辑回归或者线性核函数
  • 多项式核函数一般很少用,效率不高,结果也不优于高斯核函数;
  • 线性核函数参数少,速度快;高斯核函数参数多,分类结果非常依赖于参数,需要交叉验证或者网格搜索最佳参数,比较耗时;
  • 高斯核函数的应用非常广,无论是小样本还是大样本,高维还是低维等情况,高斯核函数均适用。
6.SVM算法的优缺点
  • 优点:
    • 在高维空间中处理非线性问题:通过使用核函数,SVM可以将数据映射到高维特征空间中,从而处理非线性问题。
    • 有效处理小样本数据集:SVM在小样本数据集上表现出色,并且对于样本维度较高的问题也适用。
    • 泛化能力强:SVM通过最大化间隔来选择最优超平面,可以有效地避免过拟合。
  • 缺点:
    • 对于大规模数据集计算复杂度高:SVM在处理大规模数据集时,需要较高的计算资源和时间。
    • 参数选择敏感:SVM的性能受到参数选择的影响,如选择核函数和正则化参数等。
    • 对于噪声和缺失数据敏感:SVM对于噪声和缺失数据比较敏感,需要进行适当的数据预处理。

综上所述,SVM是一种强大的分类算法,尤其适用于小样本数据集和高维特征空间。它在许多领域都有广泛的应用,包括图像分类、文本分类、生物信息学等。

二、SVM算法的API介绍

1.SVM算法API综述
  • SVM算法既可以用于分类问题,也可以用于回归和异常值检测问题。

  • SVM具有良好的鲁棒性,对未知数据拥有较强的泛化能力,特别是在数据量较少的情况下,相较于其他传统机器学习算法具有更优的性能。

sklearn中支持向量分类主要有三种方法:SVC、NuSVC、LinearSVC,扩展为三个支持向量回归的方法为:SVR、NuSVR、LinearSVR。

  • SVC和NuSVC方法基本一致,唯一区别就是损失函数的度量方式不同。
    • NuSVC中的nu参数和SVC中的C参数
  • LinearSVC是实现线性核函数的支持向量分类,没有kernel参数。
2.使用SVM模型时,通常采用以下流程:
  1. 对样本数据进行归一化处理;
  2. 应用核函数对样本进行映射(样本线性可分时,采用线性核函数;样本线性不可分时,采用高斯核函数(RBF));
  3. 若采用高斯核函数的话,需要用交叉验证和网格搜索选择最佳参数;
  4. 用最优参数训练得到模型;
  5. 模型评估。
3.SVC

class sklearn.svm.SVC(C=1.0, kernel=“rbf”, degree=3, coef0=0.0, random_state=None)

  • C:惩罚系数,用来控制损失函数的惩罚系数,类似于线性回归中的正则化系数。

    • C值大,惩罚力度大,趋向于对训练集全分对的情况。这样会出现训练集测试时的准确率很高,但泛化能力弱,容易导致过拟合。
    • C值小,惩罚力度小,容错能力增强,泛化能力较强,但也可能欠拟合。
  • kernel:算法中采用的核函数类型,核函数是用来将非线性问题转化为线性问题的一种方法。

    • 默认值是“RBF”,高斯核函数
    • Linear指的是线性核函数
    • Poly指的是多项式核函数
    • Sigmoid指的是双曲正切函数tanh核函数
  • degree:

    • 当指定kernel为“Poly”时,表示选择的多项式的最高次数,默认为三次多项式。
    • 当指定kernel不是“Poly”时,则忽略该参数。
  • coef0:核函数常数值(y=kx+b中的b值,即偏置)

    • 只有Poly和Sigmoid核函数中有,默认值为0
4.NuSVC

class sklearn.svm.NuSVC(nu=0.5)

  • nu:训练误差部分的上限和支持向量部分的下限,取值在(0,1)之间,默认值为0.5。
5.LinearSVC

class sklearn.svm.LinearSVC(penalty=“l2”, loss=“squared_hinge”, dual=True, C=1.0)

  • penalty:正则化参数
    • L1和L2两种参数值
  • loss:损失函数
    • 有hinge和squared_hinge两种值,前者又称L1损失,后者称为L2损失,默认值是squared_hinge。
    • 其中hinge是SVM的标准损失,squared_hinge是hinge的平方
  • dual:是否转化为对偶问题求解,默认值为True。
  • C:惩罚系数。
    • 用来控制损失函数的惩罚系数。

http://chatgpt.dhexx.cn/article/vYvjhDNF.shtml

相关文章

SVM原理及代码实现(学习笔记)

1.概念 支持向量机(Support Vector Machine, SVM)是一类按监督学习(supervised learning)方式对数据进行二元分类的广义线性分类器(generalized linear classifier),其决策边界是对学习样本求解…

SVM原理详解

SVM 原理详解 转自:http://www.blogjava.net/zhenandaci/category/31868.html (一)SVM的简介 支持向量机(Support Vector Machine)是Cortes和Vapnik于1995年首先提出的,它在解决小样本、非线性及高维模式识别中表现出许多特有的…

SVM算法原理解读

-----------------------------------------------------需要死记硬背的部分--------------------------------------------- 超平面划分正负数据 支持向量上对应的公式: 转换为: 转换为: 正样例yi1,此时 负样例yi-1&#xff…

最容易理解的SVM算法原理

基于最大间隔分隔数据 1.1支持向量与超平面 SVM(Support Vector Mac)又称为支持向量机,是一种二分类的模型。当然如果进行修改之后也是可以用于多类别问题的分类。支持向量机可以分为线性核和非线性两大类。其主要思想为找到空间中的一个更够将所有数据样本划开的…

SVM介绍

SVM 概念 支持向量机(support vector machines,SVM)是一种二分类模型。基本原理是求解能够正确划分训练数据集并且几何间隔最大的分离超平面。 作用 svm不仅可以支持这种简单的线性可分离的数据,还可以 借助“软间隔(soft margi…

SVM理论

SVM入门(一)至(三)Refresh 按:之前的文章重新汇编一下,修改了一些错误和不当的说法,一起复习,然后继续SVM之旅. (一)SVM的简介 支持向量机(Support Vector Machine)是Cortes和Vapnik于1995年…

SVM的理解

1.SVM的概念 SVM,英文全称为 Support Vector Machine,中文名为支持向量机,由数学家Vapnik等人早在1963年提出。在深度学习兴起之前,SVM一度风光无限,是机器学习近几十年来最为经典的,也是最受欢迎的分类方法…

SVM算法原理

简介 支持向量机(support vector machines)是一个二分类的分类模型(或者叫做分类器)。如图: 它分类的思想是,给定给一个包含正例和反例的样本集合,svm的目的是寻找一个超平面来对样本根据正例和…

svm原理详解,看完就懂(一)

(一)SVM的八股简介 支持向量机(Support Vector Machine)是Cortes和Vapnik于1995年首先提出的,它在解决小样本、非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中[10]。 支持向量机方法…

SVM算法—原理讲解

原文作者:奔跑的前浪 原文地址:svm算法 最通俗易懂讲解 最近在学习svm算法,借此文章记录自己的学习过程,在学习时很多处借鉴了z老师的讲义和李航的统计,若有不足的地方,请海涵;svm算法通俗的理解…

SVM --从“原理”到实现

零. 本文所有代码均能在我 github上的 DML 找到,顺便求点Star 一.引入 从一开始接触机器学习,就感觉SVM(支持向量机 Support Vector Machine)就是高端大气上档次的代名词啊,在深度学习出来之前一直都力压ANN一头&…

SVM算法详解

Support Vector Machine 终于,我们来到了SVM。SVM是我个人感觉机器学习中最优美的算法,这次我们要来非常细致地介绍。SVM是一类有监督的分类算法,它的大致思想是:假设样本空间上有两类点,我们希望找到一个划分超平面&…

SVM简介

SVM 文章目录 SVM一. 什么是SVM1. 简介2.SVM分类 二. 详细介绍1. 线性可分SVM1.1 支撑点,支撑向量1.2 分割超平面与间隔最大化1.3 线性可分SVM的目标函数以及相关算法1.4 线性可分SVM的简单举例 2.线性SVM2.1 为什么需要线性SVM2.2 线性SVM相关理论2.3 线性SVM算法 …

Svm算法原理及实现

Svm(support Vector Mac)又称为支持向量机,是一种二分类的模型。当然如果进行修改之后也是可以用于多类别问题的分类。支持向量机可以分为线性核非线性两大类。其主要思想为找到空间中的一个更够将所有数据样本划开的超平面,并且使…

SVM 原理详解,通俗易懂

看了该作者的文章,瞬间膜拜了!讲得太好了! 转自:http://www.blogjava.net/zhenandaci/category/31868.html (一)SVM的简介 支持向量机(Support Vector Machine)是Cortes和Vapnik于1995年首先提出的&…

机器学习笔记6:SVM基本原理

SVM的基本原理: 1、最大间隔原则 2、对偶表示 3、KKT条件 SVM(Support Vector Machine),又称支持向量机,在分类问题上,除了logistic分类回归外,还有另一种实现方式,那就是使用SVM原则。那么什么是SVM 呢。…

SVM原理

我们先认识一下SVM: (1)支持向量机(Support Vector Machine, SVM)是一种对数据进行二分类的广义线性分类器,其分类边界是对学习样本求解的最大间隔超平面。 (2)SVM使用铰链损失函数…

通俗易懂SVM原理介绍,适合小白食用

目录 1、SVM概念描述 2、SVM数学表达及相关计算 3、SVM优化问题定义 附:证明区 【证明1】 【计算1】 1、SVM概念描述 如图一所示,存在两个数据集,我们希望通过一个超平面将两个数据集分割开,并且我们希望这个超平面离两个数…

01-Hive创建表

声明:本实验环境是Apache hadoop-2.2.0,zookeeper-3.4.5,mysql Server version: 5.1.73作为元数据库,hive版本是apache-hive-0.9.0-bin,都是apache,不是CDH和其他。本实验集群3台,一个主节点(ha…

hive 中创建表的三种方式

官网地址:https://cwiki.apache.org/confluence/display/Hive/LanguageManualDDL 通常我们所使用的创建hive表有三种方式 1.create table 首先我们找到官网对创建表的描述如下: ’[]’ 表示可选,’|’ 表示几选一 CREATE [TEMPORARY] [EXT…