支持向量机SVM(1)——间隔最大化

本文深入探讨了支持向量机SVM的间隔最大化原理,解释了超平面、函数间隔和几何间隔的概念,以及如何通过间隔最大化找到最优决策边界。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

支持向量机SVM——间隔最大化


本文主要参考《机器学习》、《统计学习方法》。
支持向量机主要分类三类:线性可分支持向量机(数据线性可分时),线性支持向量机(数据近似线性可分),非线性支持向量机(数据线性不可分)。这里先考虑最简单的情况,即当数据线性可分时。

1.超平面

对于2分类的逻辑回归而言,假设特征数为2,那么我们训练模型的过程通过梯度下降不断更新参数迫近全局最优解,拟合出一条直线作为决策边界,使得以这个决策边界划分出来的分类结果误差最低。

当特征数量超过2,这个时候我们用来分割不同类别的“线”就成为了一个面,简称超平面(hyperplane),超即是多维的意思(二维就是一条线,三维就是一个面,多维就是超平面)。划分超平面可用如下线性方程表示:
w T x + b = 0 w^{T}x+b=0 wTx+b=0
其中 w = ( w 1 , w 2 , . . . , w d ) T w=(w_1,w_2,...,w_d)^T w=(w1,w2,...,wd)T是法向量, b b b是位移。(向量一般用列向量表示)

如果我们要用一条直线来将下面这张图中的两种类别(“+”和“-”)分开,可看到可分离的直线是有多条的,如下图所示:
在这里插入图片描述
直观上我们应该选红色的这条线,感觉它是“最能”分开这两种类的。因为如果选择黑色的线,那么可能存在一些点刚好越过黑色的线,导致被错误分类,但是红线的容错率会更好,也就不容易出错。

例如下面这种情况,如果我选择绿色的线,如果新来一个需要预测的样本(蓝色的点)本来属于“+”,但是却会被分到“-”这一类,但是红线就不会,即红线所产生的分类结果是最鲁棒的,对未见示例的泛化能力最强。
在这里插入图片描述
红色的这条决策边界就是通过间隔最大化求得的,并且是唯一。在了解间隔最大化之前先了解一下函数间隔和几何间隔的概念。

2.函数间隔和几何间隔

一般来说,一个点距离超平面的远近可以表示分类预测的确信程度。例如图中A、B、C三个点,都在超平面的正类一侧,但是点A距离超平面较远,就比较确信预测是正确的,而C距离超平面较近,所以预测C为正类就不那么确信。

(1)函数间隔:对于给定训练集和超平面(w,b),定义超平面(w,b)关于样本点 ( x i , y i ) (x_i,y_i) (xi,yi)的函数间隔为:
r i ^ = y i ( w T x i + b ) \hat{r_i}=y_i(w^Tx_i+b) ri^=yi(wTxi+b)
定义超平面 ( w , b ) (w,b) (w,b)关于训练集的函数间隔为超平面关于训练集中所有样本点的函数间隔的最小值:
r ^ = m i n ( i = 1 , . . , N ) r i ^ \hat{r}=min_{(i=1,..,N)}\hat{r_i} r^=min(i=1,..,N)ri^
可以看到当 w , b w,b w,b成比例变化时,超平面没有改变但是函数间隔变了,因此可以对 w , b w,b w,b做相应的约束,就得到了几何间隔。

(2)几何间隔:对于给定训练集和超平面(w,b),定义超平面(w,b)关于样本点 ( x i , y i ) (x_i,y_i) (xi,yi)的集合间隔为:
r i = y i ( w T x i + b ) ∣ ∣ w ∣ ∣ {r_i}=\frac{y_i(w^Tx_i+b)}{||w||} ri=wyi(wTxi+b)
定义超平面 ( w , b ) (w,b) (w,b)关于训练集的函数间隔为超平面关于训练集中所有样本点的几何间隔的最小值:
r = m i n ( i = 1 , . . , N ) r i {r}=min_{(i=1,..,N)}r_i r=min(i=1,..,N)ri

这里的几何间隔就是点到平面的距离公式,因为y为1或-1,且当前数据集线性可分,所以和 ∣ w T x i + b ∣ ∣ ∣ w ∣ ∣ \frac{|w^{T}x_i+b|}{||w||} wwTxi+b是等价的。

3.间隔最大化

因为当 w , b w,b w,b成比例变化时,函数间隔也会成比例变化,而几何间隔是不变的,所以要考虑几何间隔最大化,即我们要求解间隔最大化的超平面的问题就变成了求解如下带约束的优化问题:
{ m a x w , b r s . t . y i ( w T x i + b ) ∣ ∣ w ∣ ∣ ≥ r , i = 1 , 2 , . . , N \begin{cases}max_{w,b}\quad r\\s.t. \quad\frac{y_i(w^Tx_i+b)}{||w||}\geq r, i=1,2,..,N\end{cases} {maxw,brs.t.wyi(wTxi+b)r,i=1,2,..,N

上面的约束条件表示对于训练集中所有样本关于超平面的几何距离都至少是r。又因为函数间隔和几何间隔之间存在这样的关系: r = r ^ ∣ ∣ w ∣ ∣ r=\frac{\hat{r}}{||w||} r=wr^,所以上面的优化问题可以写成如下形式:
{ m a x w , b r ^ ∣ ∣ w ∣ ∣ s . t . y i ( w T x i + b ) ≥ r ^ , i = 1 , 2 , . . , N \begin{cases}max_{w,b}\quad \frac{\hat{r}}{||w||}\\s.t. \quad{y_i(w^Tx_i+b)}\geq \hat{r}, i=1,2,..,N\end{cases} {maxw,bwr^s.t.yi(wTxi+b)r^,i=1,2,..,N

又因为当 w , b w,b w,b成比例变为 λ w , λ b \lambda w,\lambda b λw,λb,函数间隔变为 λ r ^ \lambda \hat{r} λr^( λ > 0 \lambda>0 λ>0),虽然改变了函数间隔但是不等式约束依然满足,并且超平面也没有变,所以 r ^ \hat{r} r^的取值并不影响目标函数的优化,因此为了方便计算可以令 r ^ = 1 \hat{r}=1 r^=1,并且由于最大化 r ^ ∣ ∣ w ∣ ∣ \frac{\hat{r}}{||w||} wr^和最小化 ∣ ∣ w ∣ ∣ 2 2 \frac{||w||^2}{2} 2w2是等价的,所以优化问题可以写成如下形式:
{ m i n w , b ∣ ∣ w ∣ ∣ 2 2 s . t . y i ( w T x i + b ) ≥ 1 , i = 1 , 2 , . . , N \begin{cases}min_{w,b}\quad \frac{||w||^2}{2}\\s.t. \quad{y_i(w^Tx_i+b)}\geq 1, i=1,2,..,N\end{cases} {minw,b2w2s.t.yi(wTxi+b)1,i=1,2,..,N
并且使得上面等式成立的点也被称为支持向量(support vector)

下一篇 [支持向量机SVM(2)——拉格朗日乘数法]

### AprilTag 的全局阈值化实现方法 AprilTag 是一种用于标记检测的计算机视觉技术,具有高速、高精度和高稳定性的特点[^1]。在实际应用中,为了提高标签检测的速度和准确性,通常会对输入图像进行预处理操作,其中 **全局阈值化** 是一个重要环节。 #### 全局阈值化的定义 全局阈值化是一种简单的二值化方法,通过设定一个固定的阈值 \( T \),将灰度图像转换为黑白图像。对于每个像素点 \( p(x,y) \),如果其灰度值大于等于 \( T \),则将其设为白色;否则设为黑色。该过程可以用以下公式表示: \[ p'(x, y) = \begin{cases} 255 & \text{if } p(x, y) \geq T \\ 0 & \text{otherwise} \end{cases} \] #### 常见的全局阈值化算法 以下是几种常见的全局阈值化算法及其适用场景: 1. **固定阈值法** 使用预先指定的一个常数值作为阈值 \( T \)。此方法简单高效,但在光照不均匀的情况下效果较差。 2. **Otsu 阈值法** Otsu 方法自动计算最佳阈值 \( T \),使得前景和背景之间的类间方差最大化。这是一种无监督的方法,在双峰分布的直方图上表现良好[^3]。 ```python import cv2 # 加载灰度图像 gray_image = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE) # 应用 Otsu 阈值化 _, binary_image = cv2.threshold(gray_image, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) ``` 3. **大津改进版(自适应调整)** 对于复杂环境下的图像,可以通过局部加权平均或其他统计方法动态调整全局阈值 \( T \)[^3]。 #### AprilTag 中的应用 在 AprilTag 的实现过程中,全局阈值化的主要目的是简化图像结构以便后续边缘提取和特征匹配。具体流程如下: - 将彩色图像转换为灰度图像; - 利用上述任意一种全局阈值化方法生成二值图像; - 进一步执行形态学操作去除噪声并优化轮廓质量。 需要注意的是,虽然全局阈值化能够有效减少数据量,但它可能丢失部分细节信息。因此,在某些特殊情况下,建议结合其他高级分割手段共同作用以提升整体性能[^2]。 ```python import numpy as np from skimage.filters import threshold_otsu from skimage.io import imread, imsave def apply_global_threshold(image_path): image = imread(image_path, as_gray=True) # 计算 Otsu 阈值 thresh_value = threshold_otsu(image) # 创建二值图像 binary_img = (image >= thresh_value).astype(np.uint8) * 255 return binary_img binary_result = apply_global_threshold('april_tag_input.png') imsave('thresholded_output.png', binary_result) ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值