opencv 平面法向量_(四十五)OpenCV中的机器学习-用SVM做图像识别

本文深入探讨了如何使用支持向量机(SVM)进行图像识别,从线性可分的线性分类器开始,逐步介绍线性不可分情况下的处理方法,包括软间隔和非线性分类器。通过SVM的三重境界,解析了决策面、间隔和硬间隔的概念,并展示了如何在OpenCV中实现SVM训练和预测,以识别手写数字为例。
摘要由CSDN通过智能技术生成

时间为友,记录点滴。

如果上一篇SVM是用来描述What的问题,那么希望这一篇可以稍微深入一点,记录下How的问题。同时,也一起窥探一下机器学习的世界是不是一个稳固的大厦。

SVM的三重境

SVM在机器学习中虽然是用的比较多的,但它绝对不是最简单的那个。但是好在SVM的学习可以是阶梯式的。都说SVM有三宝:间隔、对偶、核技巧。

我们来看SVM的三重境:线性可分情况下的线性分类器

这个是最原始的SVM,它最核心的思想就是最大分类间隔,可以用来解决能够在一个二维(三维)平面上做决策线(面)的例子。(为了统一,我们后面统一用“决策面”来替代,因为线也是面在二维上的投影嘛)

他可以完美的通过“决策面+硬间隔”来分割开待测数据。

来上图看他解决的是哪类问题:就是我们上一节认识SVM用到的例子

线性不可分情况下的线性分类器

完美总是在想象中。在实际开发中,很难找到教科书般的例子让我们寻找决策面来恰好完全区分待测数据,更多的时候,红球、篮球是“你中有我极个别”或“异样点”这种噪声存在的。这个时候,就需要“决策面+软间隔”出马了。

比如下图:总有一些噪声

这种情况下虽然是线性不可分,但是我们可以通过引入松弛变量、软误差、惩戒因子等把问题转变成成新的优化问题,而新的优化问题又可以由拉格朗日方程转换成对偶问题。

晕了,晕了!简单理解软间隔就是放宽硬间隔的约束条件(容忍更多错误),从而Pass噪声的过程。

线性不可分情况下的非线性分类器

然而,就是有些情况下。上述技术手段都没办法,似乎必须引入非线性分类器了。它是“SVM与核函数(Kernel Function)”的结合。低维空间的非线性,在高维空间中也许就有明显的决策面。

不同的数据落在两个半径不同的圆上,理想的分割界面应该是一个圆圈,而不再是一个决策面了。但是如果把这些数据映射到更高的维度上,分割平面就显而易见了。

而核函数正是用来简化在高维空间中的复杂运算的。

醉了,醉了!简单理解就是就是假如“篮球是氢气球”,“红球是铁球”,那么他们即便混在一起,但是被拉上飞机这么一撒,篮球上升,红球下降,红球和篮球的分割面就自然出现了。

1 从分类器到决策面

我觉得对于我们工程师来说,理解SVM的第一重就够了。剩下的就交给算法大神们吧,毕竟要给他们留点饭碗(其实就是因为我数学太差,看不下去后面的公式,呜呜~)。

好,这样,我们讨论SVM就变成了讨论一个线性可分情况下的线性分类器。

1.1 那么,第一个问题是:什么叫线性可分?

线性可分本质上就是指能用线性函数将两类样本完全分开。

那么,我们如何判断数据是不是线性可分的?最简单的情况是数据向量是二维或者三维的,我们可以把图像画出来,直观上就能看出来。

注:对于SVM来说,支持数据必须是线性可分的(当然如果线性不可分我们还有对偶和核技巧两大法宝尝试做到线性可分)

1.2 其次,第二个问题是:什么是线性分类器?

如果线性可分是针对的数据,那么线性分类器就是SVM的核心算法了。

完蛋了,如果有人为了给你解释一个不懂的名词而用了另外一个不懂的名词,那你俩之间肯定有认知差。为了弥补线性分类器这个认知差,我们可以追本溯源从分类器开始说起。

分类器,顾名思义,就是对数据进行划分算法。比如SVM就是一个监督的二分器。但是这里有个问题,数据如此多种多样,怎么做到二分“非黑即白”呢?

实际上,按照NG大神的思路,都是要先铺垫这一部分的。即logistic函数(或称作sigmoid函数)将自变量映射到(0,1)上。

1.2.1 我们先找一个理想状态下的分类函数:二值图像的阈值

它表示,对于自变量

和对应的分类函数

,在自变量小于

的时候都分类成0这一类,大于等于

的时候则分类成1这一类。可以参考如下公式:

1.2.2 可表示的近似函数-sigmoid函数

我们先看sigmoid函数的几何表示(可以无限接近于理想状态下的分类函数):跟阈值函数是否神似?

看它的数学表达式:

所以,当我们要判别一个新来的特征属于哪个类时,只需求

即可,如果

大于0.5,就被划到1这一类,反之,就划到0这一类。

1.2.3 寻找SVM的决策面

好了,有了如上做铺垫,相比对分类器有了些许认识。我们再回到SVM中的决策面上来。

用数学公式表达这个决策面(分类函数):

(分割超平面) 指代超平面法向量,决定了决策面的方向(如果是直线y=kx+b,就好理解了,就是斜率嘛)

x指代自变量

b决定了决策面与原点之间的距离(如果是直线,就是截距嘛)

f(x)指代因变量

所以结合上图:当f(x) 等于0的时候,x便是位于决策面上的点;

而f(x)大于0的点对应 y=1 的数据点;

f(x)小于0的点对应y=-1的点

注:细心的的朋友可能会注意到,sigmoid函数做的分类器都是0和1的两类,而SVM却是-1和1两类,这纯粹是是为了方便之后的运算。毕竟0已经被决策面占了嘛。

很明显,我们这里定义的超平面是一个线性函数,所以它构成的分类器就是线性分类器。

需要注意的是,决策面是有约束条件的(否则它就是空间中无数平凡的超平面中的一个):在决策面

确定的情况下,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值