opencv svm训练java_OpenCV 中使用SVM

本文介绍了如何使用OpenCV库中的SVM(支持向量机)进行图像分类。通过示例代码展示了如何创建训练样本、设置SVM参数、训练模型以及在图像上绘制分类结果。SVM是一种有效的分类器,尤其适用于小样本、非线性和高维模式识别问题。
摘要由CSDN通过智能技术生成

分类器

分类器是一种计算机程序。

他的设计目标是在通过学习后,可自动将数据分到已知类别。

平面线性分类器

一个简单的分类问题,如图有一些圆圈和一些正方形,如何找一条最优的直线将他们分开?

separating-lines.png

我们可以找到很多种方法画出这条直线,但怎样的直线才是最优的呢?

距离样本太近的直线不是最优的,因为这样的直线对噪声敏感度高,泛化性较差。 因此我们的目标是找到一条直线,离最近的点距离最远。

怎么寻找距离最远的直线?枚举所有直线,然后计算其样本最小距离?这样显然不是一个好办法,这将产生大量的计算开销。

我们利用另一种方法,对直线的正负偏移量1,这样就产生了一个区域(下图的Maximum margin覆盖的区域),区域边界上的点到直线的距离是固定的,现在的问题是最近的点是否刚好在边界上或者在边界外。

optimal-hyperplane.png

还记得点到线的公式么?

对于直线Ax+By+C=0,点(x0, y0)到直线的距离:

distance = |Ax0+By0+C| / (A2 + B2)1/2

那么区域边缘到直线的距离:

distance = (|Ax+By+C| + 1)/ (A2 + B2)1/2 = 1/ (A2 + B2)1/2。

并需要满足对于所有样本类别yi满足:yi (Ax+By+C) > = 1,也就是所有样本都不在该区域以内。

于是我们可以找到适当的A、B、C,从而得到:

Maximum margin = 2/ (A2 + B2)1/2。

超平面推广

同理,我们将这一定理推广到任意维度。其超平面表达式为:

0f0cfaabeda8398aa556af98b2c8a6180317ccfd.png

一维是线、二维是面、三维是体……四维呢?五维呢?好吧统称超平面吧……

其中

fdb63b9e51abe6bbb16acfb5d7b773ddbb5bf4a8.png 叫做 权重向量 ,  

c9495563b51f641afe9d2cf2145b039aa94d6b04.png 叫做 偏置向量。

用这种表达式来表达线Ax+By+C = 0的话,可以这么表示:

f(x) = (C, 0) + (A, B)T (x, y);

其中(C, 0) 是偏置向量

c9495563b51f641afe9d2cf2145b039aa94d6b04.png,(A, B)是权重向量 

fdb63b9e51abe6bbb16acfb5d7b773ddbb5bf4a8.png

由于最优超平面可以有很多种表达方式,我们定义:

β0+ βTx = 0,

为最优超平面表达式。于是我们可以得到他的Maximum margin区域边界表达式应该为:

078d5267c94cc552ac7e204ee0329628b7ad4af9.png

我们称在这边界上的点为:支持向量(Supper Vector)。

因为点到超平面距离公式为:

56659fa815649f884aed47f5cf79fbd0f7bb82e5.png

在边界上,即支持向量到超平面距离:

db288cbae16c3dbf5c88195808cf65745b72f2ca.png

所以Maximum margin为两倍距离,即:

12e0bd6b43a65d7def91193ca44bd72e2c93a169.png

将M求倒数1/M 则可将求最大转换成求最小。于是有:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值