【OpenCV-Python】教程:7-5 理解SVM
创始人
2024-04-29 23:34:06
0

OpenCV Python SVM 学习

【目标】

  • 直观理解 SVM

【理论】

线性可分

下图有两种类型的数据,红色和蓝色。在kNN中,对于一个测试数据,我们用来测量它与所有训练样本的距离,并取距离最小的一个。测量所有的距离需要大量的时间,存储所有的训练样本需要大量的内存。但是考虑到图像中给出的数据,我们需要那么多吗?

在这里插入图片描述

考虑另一个想法。我们找到一条直线,f(x)=ax1+bx2+cf(x)=ax_1+bx_2+cf(x)=ax1​+bx2​+c,它将两个数据分为两个区域。当我们得到一个新的test_data XXX时,只需将它代入f(X)f(X)f(X)。如果f(X)>0f(X)>0f(X)>0,它属于蓝色组,否则它属于红色组。我们可以称这条线为决策边界。这是非常简单、高效和节省内存的。这种可以用一条直线(或高维的超平面)分为两部分的数据称为线性可分数据。

所以在上图中,你可以看到有可能会有很多这样的线,我们到底选哪一个呢?直观地说,这条线应该离所有点越远越好。为什么?因为输入的数据中可能会有噪声。该数据不应影响分类精度。所以选择一条最远的线可以增强对噪音的免疫力。所以SVM所做的是找到一条与训练样本距离最小的直线(或超平面)。请看下图中穿过中心的粗体线。

在这里插入图片描述

为了找到这个决策边界,你需要训练数据。你都需要吗?不。只需要那些靠近相反类别的数据就足够了。在我们的图像中,它们是一个蓝色圆和两个红色方块。我们可以称它们为支持向量,穿过它们的直线称为支持平面。它们足以找到我们的决策边界。我们不需要担心所有的数据。它有助于减少数据。

结果是,找到了最能代表数据的前两个超平面。例如,蓝色数据用wTx+b0>1w^Tx+b_0>1wTx+b0​>1表示,红色数据用wTx+b0<−1w^Tx+b_0<−1wTx+b0​<−1表示,其中www为权重向量(w=[w1,w2,…,wn])(w=[w_1,w_2,…,w_n])(w=[w1​,w2​,…,wn​]),xxx为特征向量(x=[x1,x2,…,xn])(x=[x_1,x_2,…,x_n])(x=[x1​,x2​,…,xn​])。b0b_0b0​是偏置。权重向量决定决策边界的方向,偏置点决定决策边界的位置。现在决策边界被定义在这些超平面的中间,因此表示为wTx+b0=0w^Tx+b_0=0wTx+b0​=0。支持向量到决策边界的最小距离为,distancesupportvectors=1∣∣w∣∣distance_{supportvectors}= \frac{1}{||w||}distancesupportvectors​=∣∣w∣∣1​。边距是这个距离的两倍。我们需要最大化这个边距(类别的边距,Margin)。即,我们需要最小化一个新函数L(w,b0)L(w,b_0)L(w,b0​),具有一些约束条件,可以表示为:

min⁡L(w,b0)=12∣∣w∣∣subject to ti(wTx+b0)≥1∀i\min \, L(w,b_0)= \frac{1}{2}||w|| \, \text{subject to } \, t_i (w^Tx+b_0)≥1 \quad \forall i minL(w,b0​)=21​∣∣w∣∣subject to ti​(wTx+b0​)≥1∀i

其中:
tit_iti​是类别标签,$t_i \in [-1, 1] $

线性不可分

假设有一些数据不能用一条直线将他们分成两部分。假如:-3,3 属于类别X, -1,1属于类别O,很明显,他们不能线性可分,但是也有一些方法可以解决这些问题,我们可以通过方程 f(x)=x2f(x)=x^2f(x)=x2将数据映射,这样,9 分为X1 分为 O,就变成可分的了。

我们可以将一维数据转换为二维数据。我们可以用f(x)=(x,x2)f(x)=(x,x^2)f(x)=(x,x2)函数来映射这个数据。然后X变成(-3,9)(3,9),而O变成(-1,1)(1,1)。这也是线性可分的。简而言之,低维空间中的非线性可分数据在高维空间中变为线性可分的可能性更大。

一般来说,可以将d维空间中的点映射到某个D维空间(D>d)来检验线性可分性的可能性。有一种思想可以通过在低维输入(特征)空间中进行计算来帮助计算高维(核)空间中的点积。我们可以用下面的例子来说明。

假设在二维空间里有两个点 p=(p1,p2)p=(p_1,p_2)p=(p1​,p2​) 和 q=(q1,q2)q=(q_1,q_2)q=(q1​,q2​),设 ϕ\phiϕ 为 映射函数,将二维数据映射到三维空间里,则有:

ϕ(p)=(p12,p22,2p1p2)\phi (p)=(p_1^2, p_2^2,\sqrt{2}p_1p_2) ϕ(p)=(p12​,p22​,2​p1​p2​)

ϕ(q)=(q12,q22,2q1q2)\phi (q)=(q_1^2, q_2^2,\sqrt{2}q_1q_2) ϕ(q)=(q12​,q22​,2​q1​q2​)

我们定义一个核函数 K(p,q)K(p,q)K(p,q)可以计算两点的点积。

K(p,q)=ϕ(p)⋅ϕ(q)=ϕ(p)Tϕ(q)=(p12,p22,2p1p2)⋅(q12,q22,2q1q2)=p12q12+p22q22+2p1q1p2q2=(p1q1+p2q2)2K(p,q)=\phi(p) \cdot \phi(q) = \phi(p)^T \phi(q) \\ =(p_1^2, p_2^2,\sqrt{2}p_1p_2) \cdot (q_1^2, q_2^2,\sqrt{2}q_1q_2) \\ = p_1^2q_1^2+p_2^2q_2^2+2p_1q_1p_2q_2 \\ = (p_1q_1+p_2q_2)^2 K(p,q)=ϕ(p)⋅ϕ(q)=ϕ(p)Tϕ(q)=(p12​,p22​,2​p1​p2​)⋅(q12​,q22​,2​q1​q2​)=p12​q12​+p22​q22​+2p1​q1​p2​q2​=(p1​q1​+p2​q2​)2

ϕ(p)⋅ϕ(q)=(p⋅q)2\phi(p) \cdot \phi(q) = (p \cdot q)^2 ϕ(p)⋅ϕ(q)=(p⋅q)2

这意味着,三维空间中的点积可以用二维空间中的平方点积来实现。这可以应用到高维空间。所以我们可以用低维来计算高维特征。一旦我们把它们映射出来,我们就得到了一个高维空间。

除了这些概念之外,还有错误分类的问题。因此,仅仅找到具有最大Margin的决策边界是不够的。我们还需要考虑分类错误的问题。有时,可能会找到一个边际较小,但错误分类较少的决策边界。无论如何,我们需要修改我们的模型,使其能够找到最大边际的决策边界,但错误分类较少。最小化准则修改为:

min⁡∣∣w∣∣2+C(distance of misclassified samples to their correct regions)\min ||w||^2+C(\text{distance of misclassified samples to their correct regions}) min∣∣w∣∣2+C(distance of misclassified samples to their correct regions)

下图显示了这个概念。为每个训练数据样本定义一个新的参数 ξiξ_iξi​ 。它是对应的训练样本到正确决策区域的距离。对于那些没有被错误分类的,它们落在相应的支撑平面上,所以它们的距离为零。

在这里插入图片描述

所以新的优化问题是:

min⁡L(w,b0)=∣∣w∣∣2+C∑iξisubject toyi(wTxi+b0)≥1−ξiandξi>0∀i\min \,L(w,b_0)=||w||^2+C\sum_i \xi_i \, \text{subject to} \, y_i(w^Tx_i+b_0)≥ 1-\xi_i \, and \: \xi_i>0 \, \forall i minL(w,b0​)=∣∣w∣∣2+Ci∑​ξi​subject toyi​(wTxi​+b0​)≥1−ξi​andξi​>0∀i

参数CCC应该如何选择?很明显,这个问题的答案取决于训练数据的分布方式。虽然没有普遍的答案,但考虑以下规则是有用的:

  • 较大的CCC值给出的解错误分类错误较小,但边际较小。考虑到在这种情况下,错误分类的代价是昂贵的。由于优化的目的是使参数最小,因此不允许出现很少的误分类错误。
  • CCC值越小,解的余量越大,分类误差越大。在这种情况下,最小化没有考虑那么多的和项,所以它更专注于找到一个有大Margin的超平面。

【参考】

  1. OpenCV: Understanding SVM
  2. NPTEL notes on Statistical Pattern Recognition, Chapters 25-29.

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...