SVM介绍

原文地址:http://www.cnblogs.com/justany/archive/2012/11/23/2784125.html

分类器

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

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

 

平面线性分类器

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

A seperation example

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

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

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

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

The Optimal hyperplane

还记得点到线的公式么?

对于直线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

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

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

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

 

超平面推广

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

    f(x) = \beta_{0} + \beta^{T} x,

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

其中 \beta 叫做 权重向量 ,  \beta_{0} 叫做 偏置向量。

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

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

其中(C, 0) 是偏置向量 \beta_{0},(A, B)是权重向量 \beta

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

    ββTx = 0,

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

    |\beta_{0} + \beta^{T} x| = 1

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

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

    \mathrm{distance} = \frac{|\beta_{0} + \beta^{T} x|}{||\beta||}.

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

    \mathrm{distance}_{\text{ support vectors}} = \frac{|\beta_{0} + \beta^{T} x|}{||\beta||} = \frac{1}{||\beta||}.

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

    M = \frac{2}{||\beta||}

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

    \min_{\beta, \beta_{0}} L(\beta) = \frac{1}{2}||\beta||^{2} \text{ subject to } y_{i}(\beta^{T} x_{i} + \beta_{0}) \geq 1 \text{ } \forall i,

其中 y_{i} 表示样本的类别标记。

这是一个拉格朗日优化问题,可以通过拉格朗日乘数法得到最优超平面的权重向量 \beta 和偏置 \beta_{0} 。

什么是SVM

支持向量机 (SVM) 是一个类分类器,正式的定义是一个能够将不同类样本在样本空间分隔的超平面。 换句话说,给定一些标记好的训练样本 (监督式学习),SVM算法输出一个最优化的分隔超平面。

1995年Cortes和Vapnik于首先提出SVM,它在解决小样本、非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中。



### 支持向量机SVM)的基本概念和工作原理 支持向量机(Support Vector Machine, SVM)是一种监督学习算法,广泛用于分类问题。其核心思想是通过一个超平面来最大化不同类别之间的间隔,从而实现分类[^1]。 #### 1. 线性可分情况下的SVM 在数据线性可分的情况下,SVM的目标是找到一个最优的超平面,该超平面能够将不同类别的数据点正确分开,并且最大化数据点到超平面的距离(即间隔)。这种间隔的最大化有助于提高模型的泛化能力[^2]。 数学上,假设输入数据为 \( (x_i, y_i) \),其中 \( x_i \) 是特征向量,\( y_i \in \{-1, +1\} \) 是类别标签。SVM试图找到一个满足以下条件的超平面: \[ y_i(w^T x_i + b) \geq 1 \] 其中,\( w \) 是超平面的法向量,\( b \) 是偏置项。为了最大化间隔,需要最小化 \( ||w|| \)[^2]。 #### 2. 软间隔与核技巧 当训练数据线性不可分时,可以通过引入软间隔最大化和核技巧来解决。软间隔允许部分样本位于间隔内部甚至被错误分类,从而增加模型的灵活性[^4]。 - **软间隔最大化**:通过引入松弛变量 \( \xi_i \) 和惩罚参数 \( C \),优化目标变为: \[ \min_{w, b, \xi} \frac{1}{2}||w||^2 + C \sum_{i=1}^n \xi_i \] 同时满足约束条件: \[ y_i(w^T x_i + b) \geq 1 - \xi_i, \quad \xi_i \geq 0 \] - **核技巧**:对于非线性问题,可以使用核函数将原始数据映射到高维特征空间,在高维空间中寻找线性可分的超平面。常用的核函数包括线性核、多项式核和径向基函数(RBF)核[^4]。 #### 3. 拉格朗日对偶与SMO算法 拉格朗日对偶方法将原始优化问题转化为对偶问题,从而简化求解过程。通过对偶问题,可以消除 \( w \) 的直接计算,转而优化拉格朗日乘子 \( \alpha \)[^3]。 最终的决策函数形式为: \[ f(x) = \text{sign} \left( \sum_{i=1}^n \alpha_i y_i K(x_i, x) + b \right) \] 其中,\( K(x_i, x) \) 是核函数。 序列最小优化(SMO)算法是一种高效的二次规划求解方法,专门用于SVM的对偶问题求解[^3]。 #### 4. 实践示例 以下是一个使用Python中的`sklearn`库实现线性SVC的简单示例: ```python from sklearn.svm import LinearSVC from sklearn.pipeline import make_pipeline from sklearn.preprocessing import StandardScaler from sklearn.datasets import make_classification # 创建数据集 X, y = make_classification(n_features=4, random_state=11) # 构建SVM模型 clf = make_pipeline(StandardScaler(), LinearSVC(random_state=12, tol=1e-5)) clf.fit(X, y) # 打印超平面参数 print("超平面的w值:", clf.named_steps['linearsvc'].coef_) print("超平面的b值:", clf.named_steps['linearsvc'].intercept_) ``` 上述代码展示了如何使用`LinearSVC`构建一个线性支持向量机模型,并输出超平面的权重和偏置项[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值