函数间隔(functional margin)和几何间隔(geometric margin)

本文介绍了函数间隔和几何间隔的概念及其在支持向量机中的应用。解释了两者的区别和联系,指出当向量w的模长为1时,两者相等;当超平面参数成比例变化时,函数间隔随之变化而几何间隔保持不变。

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

对于给定的训练数据集T和超平面(w,b),定义超平面关于样本点(x_i,y_i)的函数间隔为


定义超平面(w,b)关于训练数据集T的函数间隔为超平面关于T中所有样本点的函数间隔之最小值,即


       函数间隔可以表示分类预测的正确性及确信度,但选择分离超平面时,只有函数间隔还不够,因为只要成比例改变w和b,超平面并没有改变,但函数间隔却变了,因此需要对分离超平面的法向量加上某些约束,如规范化,||w||=1,使用间隔是确定的,这时函数间隔成为了几何间隔。

几何间隔

对于给定的训练数据集T和超平面(w,b),定义超平面关于样本点(x_i,y_i)的几何间隔为


其中,||w||为w的L_2范数。定义超平面(w,b)关于训练数据集T的几何间隔为超平面关于中所有样本点的几何间隔之最小值,即


       由函数间隔和几何间隔的定义可知,它们之前的关系如下:


如果||w||=1,那么函数间隔和几何间隔相等。如果超平面参数w和b成比例地改变,函数间隔也按此比例改变,而几何间隔不变。
### 支持向量机中的几何间隔概念 在支持向量机(SVM)中,几何间隔是指某个样本点到分类超平面的实际距离。这一定义基于欧几里得空间的距离度量方式,并考虑了数据点的规范化表示。 对于给定的数据点 \( \mathbf{x}_i \),其对应的类别标签为 \( y_i \in \{-1, +1\} \),假设当前的超平面由参数 \( (\mathbf{w}, b) \) 表示,则该点到超平面的几何间隔可以写成如下形式: \[ d(\mathbf{x}_i) = \frac{|y_i (\mathbf{w}^\top \mathbf{x}_i + b)|}{||\mathbf{w}||}. \] 其中: - \( ||\mathbf{w}|| \) 是权重向量 \( \mathbf{w} \) 的 L2 范数; - \( \mathbf{w}^\top \mathbf{x}_i + b \) 是决策函数的部分表达式[^1]。 由于 SVM 中的目标是最优化分离效果,因此通常会引入 **最大间隔原则** 来寻找最优解。在此过程中,几何间隔被进一步标准化处理,使得目标变为最大化最小化后的间隔值。 #### 计算方法解释 为了便于理解如何计算几何间隔,在实际操作中有以下几个要点需要注意: 1. 对于任意一个训练样例而言,如果它正好位于边界上(即成为支持向量),那么它的几何间隔应满足特定条件——等于单位长度除以权值矢量模长的结果。 即当某一点恰好落在正负两类区域之间的中间位置时, \[ d_{support-vector} = \frac{1}{||\mathbf{w}||}. \] 2. 如果某些噪声或者错误标注的存在破坏了原本严格的线性可分性质,则可以通过引入松弛变量来调整模型设定从而允许一定程度上的误分类现象发生 [^2] 。此时所涉及的是所谓的“软间隔”。 通过上述分析可以看出,无论是硬间隔还是软间隔情况下的求解过程都离不开对几何间隔的理解及其相应公式的应用。 ```python import numpy as np def geometric_margin(w, b, X, y): """ Calculate the geometric margin of a set of points with respect to a hyperplane. Parameters: w (numpy array): Weight vector defining the orientation of the hyperplane. b (float): Bias term determining position along normal direction. X (numpy matrix): Data samples where each row represents one sample point. y (numpy array): Labels associated with data (+1 or -1). Returns: float: The minimal geometric margin across all provided points. """ margins = [] norm_w = np.linalg.norm(w) for i in range(len(X)): distance = abs(y[i]*(np.dot(w.T, X[i]) + b)) / norm_w margins.append(distance) return min(margins), max(margins) # Example usage if __name__ == "__main__": # Define parameters and dataset example W_example = np.array([3,-4]) B_example = 7 Points = np.array([[1,0], [-1,2]]) Y_labels = np.array([1, -1]) result_min, result_max = geometric_margin(W_example, B_example, Points, Y_labels) print(f"Minimal Geometric Margin is {result_min}") print(f"Maximal Geometric Margin is {result_max}") ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值