Task5 svm

学习内容

  • SVM 硬间隔原理
  • SVM 软间隔
  • SMO 求解SVM
  • 代码设计

1、硬间隔

本文是需要一定基础才可以看懂的,建议先看看参考博客,一些疑惑会在文中直接提出,大家有额外的疑惑可以直接评论,有问题请直接提出,相互交流。

SVM-统计学习基础

一开始讲解了最小间距超平面:所有样本到平面的距离最小。而距离度量有了函数间隔和几何间隔,函数间隔与法向量 w w w b b b有关, w w w变为 2 w 2w 2w则函数间距变大了,于是提出了几何距离,就是对 w w w处理,除以 ∣ ∣ w ∣ ∣ ||w|| w,除以向量长度,从而让几何距离不受影响。

但是支持向量机提出了最大间隔分离超平面,这似乎与上面的分析相反,其实这个最大间隔是个什么概念呢?通过公式来分析一下,正常我们假设超平面公式是:
w T x + b = 0 / / 超 平 面 w^{T}x+b=0 // 超平面 wTx+b=0//
max ⁡ w , b γ s . t . y i ( w ∣ ∣ w ∣ ∣ x i + b ∣ ∣ w ∣ ∣ ) > γ \max \limits_{w,b} \quad \gamma \\ s.t. \quad y_i(\frac{w}{||w||}x_i+\frac{b}{||w||}) > \gamma w,bmaxγs.t.yi(wwxi+wb)>γ
也就是说对于所有的样本到超平面距离 都大于 γ \gamma γ,那这个 γ \gamma γ如何求解,文中约定了概念支持向量:正负样本最近的两个点,这两个点之间的距离就是 γ \gamma γ,那么问题来了,这中间的超平面有无数个,如何确定这个超平面呢?于是我们可以约束这个超平面到两个最近的点的距离是一样的。

上图中两个红色菱形点与一个蓝色实心圆点就是支持向量,通过这个求解目标,以及约束条件来求解这个超平面。书中有完整的公式装换以及证明这个超平面的唯一性。

这里要讲解一个样本点到直线的距离,
正常我们可能难以理解公式里 y y y去哪里了,拿二维空间做例子,正常我们说一个线性方程都是 y = a x + b y=ax+b y=ax+b,其中a和b都是常量,这个线性方程中有两个变量 x x x y y y,转换公式就是 y − a x − b = 0 y-ax-b=0 yaxb=0,从线性矩阵的角度来思考问题就是 y y y x 1 x_1 x1 x x x x 2 x_2 x2,用一个 w T w^T wT来表示这两者的系数,用 b b b代替 − b -b b,所以公式就变为了:
w T x + b = 0 w^{T}x+b=0 wTx+b=0
于是任意一个样本点到超平面的距离是:
r = ∣ w T x + b ∣ ∣ ∣ w ∣ ∣ r = \frac{|w^{T}x+b|}{||w||} r=wwTx+b
也就是说约束条件中要求 > γ >\gamma >γ,其实就是大于支持向量到超平面的距离。

通过一个例子来看看:

这里例子中有 w 1 , w 2 w_1,w_2 w1,w2,这是因为坐标点是二维的,相当于样本特征是两个,分类的结果是这两个特征的结果标签,所以这里的 w w w就是一个二维的,说明在具体的应用里需要根据特征来确定 w w w的维度。

对偶讲解

其实原始问题是这样的:
max ⁡ w , b γ s . t . y i ( w ∣ ∣ w ∣ ∣ x i + b ∣ ∣ w ∣ ∣ ) > γ \max \limits_{w,b} \quad \gamma \\ s.t. \quad y_i(\frac{w}{||w||}x_i+\frac{b}{||w||}) > \gamma w,bmaxγs.t.yi(wwxi+wb)>γ
利用几何距离与函数距离的关系 γ = γ ^ ∣ ∣ w ∣ ∣ \gamma = \frac{\hat{ \gamma}}{||w||} γ=wγ^将公式改为:
max ⁡ w , b γ ^ ∣ ∣ w ∣ ∣ s . t . y i ( w x i + b ) > γ ^ \max \limits_{w,b} \quad \frac{\hat{ \gamma}}{||w||} \\ s.t. \quad y_i(wx_i+b) > \hat{\gamma} w,bmaxwγ^s.t.yi(wxi+b)>γ^
函数间隔是会随着 w 与 b w与b wb的变化而变化,同时将 w 与 b w与b wb变成 λ w 与 λ b \lambda w与\lambda b λwλb,则函数间隔也会变成 λ γ \lambda \gamma λγ,所以书中直接将 γ = 1 \gamma=1 γ=1来转换问题。同样的问题又改为:
max ⁡ w , b 1 ∣ ∣ w ∣ ∣ s . t . y i ( w x i + b ) > 1 \max \limits_{w,b} \quad \frac{1}{||w||} \\ s.t. \quad y_i(wx_i+b) >1 w,bmaxw1s.t.yi(wxi+b)>1
求解最大值改为另一个问题,求解最小值:
min ⁡ 1 2 ∣ ∣ w ∣ ∣ 2 s . t . y i ( w x i + b ) > 1 \min \quad \frac{1}{2} ||w||^2 \\ s.t. \quad y_i(wx_i+b) >1 min21w2s.t.yi(wxi+b)>1
这就是一个对偶问题的例子,也是书中支持向量机模型的一个目标函数转换的过程,大家可以看看了解一下这个思路。其实书中利用拉格朗日乘子来求解条件极值,这一块在高等数学中多元函数的极值及求解方法中有提到。

软间隔

硬间隔是方便用来分隔线性可分的数据,如果样本中的数据是线性不可分的呢?也就是如图所示:

有一部分红色点在绿色点那边,绿色点也有一部分在红色点那边,所以就不满足上述的约束条件: s . t . y i ( x i + b ) > 1 s.t. \quad y_i(x_i+b) >1 s.t.yi(xi+b)>1,软间隔的最基本含义同硬间隔比较区别在于允许某些样本点不满足原约束,从直观上来说,也就是“包容”了那些不满足原约束的点。软间隔对约束条件进行改造,迫使某些不满足约束条件的点作为损失函数,如图所示:
软间隔公式
这里要区别非线性情况,非线性的意思就是一个圆圈,圆圈里是一个分类结果,圆圈外是一个分类结果。这就是非线性的情况。

其中当样本点不满足约束条件时,损失是有的,但是满足条件的样本都会被置为0,这是因为加入了转换函数,使得求解min的条件会专注在不符合条件的样本节点上。

但截图中的损失函数非凸、非连续,数学性质不好,不易直接求解,我们用其他一些函数来代替它,叫做替代损失函数(surrogate loss)。后面采取了松弛变量的方式,来使得某些样本可以不满足约束条件。
软间隔公式

这里思考一个问题:既然是线性不可分,难道最后求出来的支持向量就不是直线?某种意义上的直线?
其实还是直线,不满足条件的节点也被错误的分配了,只是尽可能的求解最大间隔,

核函数

引入核函数可以解决非线性的情况:将样本从原始空间映射到一个更高为的特征空间,使得样本在这个特征空间内线性可分。图片所示:
SVM-非线性样本可分图.PNG

粉红色平面就是超平面,椭圆形空间曲面就是映射到高维空间后的样本分布情况,为了将样本转换空间或者映射到高维空间,我们可以引用一个映射函数,将样本点映射后再得到超平面。这个技巧不仅用在SVM中,也可以用到其他统计任务。
但映射函数并不是最重要的,核函数是重要的,看到《统计学习方法》中提到的概念:
核函数定义

其中映射函数与核函数之间有函数关系,一般我们显示的定义核函数,而不显示的定义映射函数,一方面是因为计算核函数比映射函数简单,我们对一个二维空间做映射,选择的新空间是原始空间的所有一阶和二阶的组合,得到了五个维度;如果原始空间是三维,那么我们会得到 19 维的新空间,这个数目是呈爆炸性增长的,这给 的计算带来了非常大的困难,而且如果遇到无穷维的情况,就根本无从计算了。所以就需要 Kernel 出马了。这样,一个确定的核函数,都不能确定特征空间和映射函数,同样确定了一个特征空间,其映射函数也可能是不一样的。举个例子:
核函数与映射函数
上述例子很好说明了核函数和映射函数之间的关系。这就是核技巧,将原本需要确定映射函数的问题转换为了另一个问题,从而减少了计算量,也达到了线性可分的目的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenCV中的SVM(支持向量机)是一种机器学习算法,用于分类和回归问题。SVM通过将训练数据映射到高维空间,并在该空间中找到一个最优超平面来分离不同的类别。它可以在不同的核函数(如线性核、多项式核和高斯核)下工作,并且可以根据数据的特性和问题的要求进行设置。 在OpenCV中,使用SVM的步骤如下: 1. 创建一个分类器对象:使用cv::ml::SVM::create()函数创建一个SVM分类器对象。 2. 设置相关参数:通过svm->setType()设置分类器类型,svm->setKernel()设置核函数类型,并使用其他函数设置其他参数,如svm->setGamma()、svm->setC()、svm->setTermCriteria()等。 3. 获取数据集:创建训练数据集,使用cv::ml::TrainData::create()函数将数据和标签传递给训练数据对象。 4. 训练模型:使用svm->train()函数训练分类器,传入训练数据集。 5. 预测:使用svm->predict()函数对测试数据进行预测,返回预测结果。 6. 保存和加载模型:使用svm->save()函数将模型保存为xml文件,使用cv::ml::SVM::load()函数加载保存的模型。 此外,还可以使用cv::ml::SVM::trainAuto()函数来自动选择最优参数进行训练,该函数会尝试不同的参数组合,并选择效果最好的参数。 希望以上信息能够对你有所帮助。如果还有其他问题,请随时提问。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [OpenCV(一)---支持向量机 SVM](https://blog.csdn.net/qq_42995327/article/details/114462958)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值