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

支持向量机算法(三):非线性支持向量原理层层拆解,精读公式每一处细节

支持向量机算法(一):像讲故事一样讲明白它的原理及实现奥秘-CSDN博客

支持向量机算法(二):层层拆解,精读公式每一处细节-CSDN博客

支持向量机算法(一)、算法(二)学习了什么是支持向量机、线性可分支持向量机、线性支持向量机,本次学习非线性支持向量机。

在线性支持向量机模型中,通过引入松弛因子可以让少量噪声样本也能正确分类并得到最优超平面,用线性超平面将非线性数据集近似分离。然而,这些被战略性“放弃”的样本是少数样本,被认为是噪声或是一种扰动。如果数据集中两种类别的大部分样本都是混叠在一起,那么采用这种方法得到的模型效果就不佳了。此时,要采用核函数映射的方法将低维空间映射到高维空间,将低维空间中的非线性问题转化为高维空间中的线性问题。

因此,非线性支持向量机模型为“核函数映射+线性支持向量机模型”,即在核函数映射后的数据集上训练线性支持向量机模型。 核函数映射的技巧在于不显式地定义映射函数,而是通过寻找一个核函数k(·,·),使得通过核函数映射后的结果等价于样本通过映射函数后在特征空间的内积。即核技巧实际是将特征映射与内积两步运算压缩在一起,而不关心具体的映射函数本身是哪种形式。

☀我们该如何理解这段话呢?

(1)从映射说起
想象你有一些玩具(这些玩具就像是原始数据),它们在一个小盒子(低维空间)里摆放着。你想把这些玩具放到一个大仓库(高维空间)里,并且摆放的方式要更有规律,这样才能更好地分类或者做其他操作。这个把玩具从盒子放到仓库并且重新摆放的过程就像是映射函数。
以前呢,我们得先想好怎么把玩具从盒子拿到仓库,并且要清楚地告诉别人每个玩具在仓库里放在哪儿,这就是明确地定义映射函数。比如,你要把一个小方块玩具从盒子里拿到仓库,并且规定它在仓库的第三排第五列第二层(这就像定义了映射函数后,知道样本在高维空间的位置)。
(2)核函数的特别之处
现在有了核函数,就好像有了一个魔法盒子。你不需要知道玩具在大仓库里具体是怎么摆放的(不需要知道映射函数)。
这个魔法盒子有个神奇的功能,你只要把两个玩具的名字(原始样本)告诉它,它就能直接告诉你这两个玩具在大仓库里如果按照某种神秘规则摆放后,它们离得有多近(通过核函数计算得到的结果等价于在高维空间中的内积)。
比如,有两个玩具叫小熊和小兔子,你把它们的名字告诉魔法盒子(核函数),魔法盒子就会告诉你一个数字,这个数字就代表了如果把小熊和小兔子放到大仓库里,它们之间的一种亲密程度(在高维特征空间中的内积)。
(3)为什么这样做很好
要是用以前的方法,你得先把小熊和小兔子按照复杂的规则放到大仓库里(计算映射函数),然后再量它们之间的距离(计算内积),这很麻烦。
但是有了魔法盒子(核函数),就简单多了。而且,很多时候,我们其实只关心小熊和小兔子在大仓库里是不是离得近(样本在高维空间中的相似性),并不关心它们具体放在仓库的哪个位置(具体的映射函数)。所以核函数这种方法又简单又能达到我们想要的效果。

核函数的定义如下:设Ω为输入空间(欧式空间),Η为特征空间(希尔伯特空间),如果存在一个从Ω到H 的映射∅(x):Ω→ Η,使得对于所有的x, y∈Ω,都有函数k(x,y)满足:

 则称k(x,y)为核函数,∅ (·)定义为映射函数,∅(x)·∅(y)表示映射后在特征空间的内积,以下是几种常用的核函数。

(1)线性核函数

线性核函数(Linear Kernel)是最简单的核函数,主要用于线性可分的情况,表达式为:

其中,c为可选的常数。线性核函数是原始输入空间的内积,即特征空间和输入空间的维度是一样的,参数较少,运算速度较快。一般情况下,在特征数量相对于样本数量非常多时,适合采用线性核函数。

①公式解读

xy是输入的向量(可以理解为数据点),x^{T}是向量x的转置,x^{T}\cdot y这部分就是两个向量的内积运算,c是一个可选的常数。

②线性核函数特点

☛与原始输入空间的关系:线性核函数是原始输入空间的内积,这意味着它没有对原始数据进行复杂的非线性变换,直接使用原始数据的内积来计算核函数的值。例如,在二维平面上有一些点,使用线性核函数计算它们之间的核函数值,就是直接计算这些点坐标向量的内积。
☛特征空间和输入空间维度:因为是原始输入空间的内积,所以特征空间和输入空间的维度是一样的。比如原始数据是三维向量,那么经过线性核函数处理后,在 “特征空间”(这里其实就是原始空间)中还是三维的。
☛参数较少:相比其他一些复杂的核函数(如高斯核函数等),线性核函数只有内积运算和一个可选的常数,没有其他复杂的参数需要调整,所以参数较少。
☛运算速度较快:由于不需要进行复杂的非线性变换等计算,只是简单的内积运算和可能的常数加法,所以运算速度相对较快。例如,在处理大规模数据时,计算线性核函数的值比计算一些复杂核函数的值要快很多。

(2)多项式核函数

多项式核函数(Polynomial Kernel)的参数比较多,当多项式阶数高时,复杂度会很高,对于正交归一化后的数据,可优先选此核函数,其表达式如下:

其中,α表示调节参数,p表示最高次项次数,c为可选常数。 

线性核函数是多项式核函数的特殊情况(a=1,p=1),多项式核函数通过调整a、c和p的值,可以得到不同的核函数形式,具有更强的灵活性和适应性。

(3)径向基核函数(高斯核函数)

径向基核函数(Radial Basis Function Kernel)具有很强的灵活性,应用很广泛。与多项式核函数相比,它的参数少,因此大多数情况下,都有比较好的性能;在不确定用哪种核函数时,可优先验证高斯核函数。由于类似于高斯函数,所以也称其为高斯核函数。表达式如下:

其中,σ^2越大,高斯核函数变得越平滑,模型的偏差和方差大,泛化能力差,容易过拟合。σ^2越小,高斯核函数变化越剧烈,模型的偏差和方差越小,模型对噪声样本比较敏感。 

①公式各部分表达的意思

k(x,y):表示核函数的值,它衡量了输入向量xy之间的某种相似度或关系。 

exp:表示以自然常数e为底的指数函数。

\left \| x-y \right \|^{2}:这是向量xy之间的欧几里得距离的平方。它反映了两个向量在空间中的距离远近,距离越近,\left \| x-y \right \|^{2}的值越小。

\sigma:是一个超参数,称为带宽(bandwidth)。它控制了高斯核函数的宽度,\sigma的值越大,核函数的曲线越平坦,意味着对距离较远的样本也会给予一定的权重;\sigma的值越小,核函数的曲线越陡峭,只有距离非常近的样本才会有较大的权重。

☀我们该如何理解超参数呢?

在机器学习中,超参数是在模型训练之前需要手动设置的参数,它不通过模型的训练过程来学习。就是高斯核函数中的一个超参数,它对核函数的形状和性质有着重要的影响。

在机器学习任务中,\sigma的选择至关重要:

①如果选择的\sigma值过大,模型可能会过于平滑,导致对训练数据的拟合不足,可能无法捕捉到数据中的复杂模式,从而在测试数据上的表现不佳,出现欠拟合的情况。
②相反,如果\sigma值过小,模型可能会对训练数据中的噪声过于敏感,过度拟合训练数据,在新的数据上泛化能力差。
③因此,需要通过交叉验证等方法来选择合适的\sigma值,以平衡模型的拟合能力和泛化能力,使得模型在处理实际问题时能够达到较好的性能。

\sigma作为高斯核函数的带宽,通过控制核函数的宽度,影响着样本之间的权重分配,进而对基于高斯核函数的机器学习模型的性能产生重要影响,需要谨慎选择和调整。

(4)Sigmoid 核函数

Sigmoid核函数来源于感知机中的激活函数,SVM使用Sigmoid相当于一个两层的感知机网络,Sigmoid核函数表达式如下:

其中,α表示调节参数,c为可选常数,一般c可取为1/n,n为数据维度。     

☀tanh是什么呢?

tanh是双曲正切函数,它的定义为:

函数的值域在(-1,1)之间,它具有非线性的特性,可以将输入值映射到这个区间内。

非线性支持向量机的算法步骤如下:

①选择合适的核函数k(x,y)与惩罚参数C,并计算核函数的映射结果。

②构造并求解约束最优化问题:

 ☀公式是什么意思呢?

是要最大化的目标函数。

☛其中, a_{i}是拉格朗日乘子, y_{i}是样本x_{i}的类别标签(通常为 +1 或 -1), k(x_{i},y_{i})是核函数,用于计算样本x_{i}x_{j}在高维特征空间中的内积(或相似度)。

是所有拉格朗日乘子的和,是一个关于拉格朗日乘子和样本之间相似度的二次项。通过最大化这个目标函数,可以找到最优的拉格朗日乘子值,进而确定支持向量机(SVM)的决策边界。

是一个等式约束,表示所有样本对应的拉格朗日乘子与类别标签的乘积之和为 0。这个约束条件保证了模型的分类决策是基于样本之间的相对关系,而不是绝对的数值大小。

是不等式约束,其中C是一个超参数,称为惩罚参数。它控制了对误分类样本的惩罚程度。

③使用SMO等算法得到最佳超平面得到最佳分类面的表达式

非线性支持向量机模型核函数的选择非常关键,而选定核函数后,核函数中的参数也直接影响了模型性能。因此,在非线性支持向量机模型中,需要优化的超参数有惩罚参数C及核函数的参数,如多项式核函数的阶次p、高斯核函数的核函数宽度σ。


http://www.kler.cn/a/509055.html

相关文章:

  • 流程与管理篇:IPD核心思想与框架
  • MQ消息队列
  • C++速览之智能指针
  • 在Linux上如何让ollama在GPU上运行模型
  • mongoose 支持https踩坑纪实
  • 爬虫基础学习
  • JavaScript 代码规范
  • MarsCode青训营打卡Day5(2025年1月18日)|稀土掘金-148.小A的子数组权值、304.计算特定条件下的四元组数量
  • 1.6 从 GPT-1 到 GPT-3.5:一路的风云变幻
  • 蓝桥杯算法日常|枚举[*找到最多的数]
  • ASP.NET Core 中的 JWT 鉴权实现
  • recat与vue相比有什么优缺点
  • Titans 架构中的记忆整合:Memory as a Context;Gated Memory;Memory as a Layer
  • 用 Rust 写下第一个 “Hello, World!”
  • 2024年AI与大数据技术趋势洞察:跨领域创新与社会变革
  • 【PyCharm】远程连接Linux服务器
  • 钉钉消息推送()
  • 数据结构——队列和栈(介绍、类型、Java手搓实现循环队列)
  • RV1126+FFMPEG推流项目(5)VI和VENC模块绑定,并且开启线程采集
  • 【Django开发】django美多商城项目完整开发4.0第12篇:商品部分,表结构【附代码文档】
  • 动手学大数据-1大数据体系介绍与 SQL 处理流程
  • 58,【8】BUUCTF [PwnThyBytes 2019]Baby_SQL1
  • Python 调整 Excel 中的行列顺序
  • 【漫话机器学习系列】053.梯度爆炸(Exploding Gradient Problem)
  • Day30上 - ChromaDB 向量数据库
  • 基于springboot+vue的食物营养分析与推荐网站的设计与实现