SVM支持向量机

支持向量机的背景和应用场景

        支持向量机(Support Vector Machine,简称SVM)是一种监督学习算法,广泛应用于分类和回归任务。SVM的核心思想是寻找一个超平面,使得两个类别之间的间隔最大化,从而实现良好的分类效果。SVM可以处理线性可分和线性不可分的问题,通过引入核函数将数据映射到高维空间实现非线性分类。SVM在许多领域都有广泛的应用,如图像识别、文本分类、生物信息学、金金融风控等。特别适用于小样本、高维特征、非线性问题。

例如:图像分类:SVM可以用于图像分类任务,例如手写数字识别、人脸识别等。

        文本分类:SVM可以用于文本分类任务,例如如垃圾邮件过滤、情感分析等。

SVM的原理和数学推导        

        SVM是一种无监督机器学习方法,常用于二分类问题。它的基本思想是通过寻找一个最优的超平面来划分不同类别的数据点。SVM具有以下优点:

        1.高维空间表现好,可以处理非线性关系和线性不可分的问题。

        2.在样本数大于维数时表现依旧很好,因为超平面只包含少数几个支持向量。

        3.内存友好,因为超平面是由几个支持向量撑起来的,不需要占用大量的内存空间。

        4.多样性,可以使用多种核函数来映射数据点到高维空间。

        SVM的原理和数学推导涉及到以下几个个概念:

超平面、间隔和支持向量

        假设我们有一个二维的数据集,其中每个数据点属于两个不同的类别,用yi​∈{−1,+1}表示。我们想要找到一个线性的决策边界,也就是一个超平面,来分隔这两个类别。一个超平面可以用如下的方程表示:

w^{T}x+b=0

        其中w是一个法向量,决定了超平面的方向,b是一个偏置项,决定了超平面的位置。我们可以用超平面的方程来对一个新的数据点x进行分类,如果wTx+b>0,则x属于+1类,否则属于−1类。

        其中:

w = \begin{bmatrix} w_1 \\ w_2 \\ \vdots \\ w_n \end{bmatrix} b = \begin{bmatrix} b_1 \\ b_2 \\ \vdots \\ b_n \end{bmatrix}

        我们希望找到一个最优的超平面,使得它能够最大化地分隔两个类别,也就是最大化两个类别的最近的数据点到超平面的距离,这个距离称为间隔(margin)。间隔可以用如下的公式计算:

\gamma= \frac{y_i(w^Tx_i + b)}{\|w\|}

        其中{y_i(w^Tx_i + b)}表示第i个数据点到超平面的有符号距离,∥w∥表示w的范数。我们可以看到,当w和b同时乘以一个常数时,超平面的方程不变,但是间隔会变化。为了消除这种影响,我们可以规定所有的数据点都满足{y_i(w^Tx_i + b)}≥1,这样我们就得到了一个规范化的间隔,它只取决于w的范数。

        我们可以进一步观察到,间隔的大小只取决于那些恰好满足{y_i(w^Tx_i + b)}=1的数据点,这些数据点称为支持向量(support vector),它们位于两个平行的超平面w^{T}x+b=1w^{T}x+b=-1之间,这两个超平面称为间隔边界(margin boundary)。因此,我们只需要找到这些支持向量,就可以确定最优的超平面。

        支持向量:一个或多个数据点,使得它们到超平面的距离最小,并且没有其他数据点能够同时满足这个条件。

        向量为:

v = \begin{bmatrix} v_1 \\ v_2 \\ \vdots \\ v_n \end{bmatrix}

损失函数和优化目标

        为了找到最优的超平面,我们需要定义一个损失函数(loss function),用来衡量超平面的好坏。由于我们的目标是最大化间隔,也就是最小化||w||,所以我们可以定义损失函数为\frac{1}{2}||w||^{2},这样既可以简化计算,又可以避免w和b为零的情况。同时,我们需要满足所有数据点的约束条件y_{i}(w^{T}x_{i})+b \geq 1,这样就可以保证数据点被正确地分类。因此,我们的优化目标可以表示为:

\min_{w, b} \frac{1}{2}\|w\|^2

s.t. \quad y_i(w^Tx_i + b) \geq 1, \quad i = 1, 2, ..., n

        这是一个带有线性约束的凸二次规划(convex quadratic programming)问题,可以用一些数值方法来求解,但是计算复杂度较高,而且不易扩展到非线性的情况。为了更好地求解这个问题,我们可以利用拉格朗日对偶性(Lagrange duality)来将原始的问题转化为一个对偶问题,从而简化计算,并且引入核函数(kernel function)来处理非线性的情况。

拉格朗日对偶性和凸二次规划

        拉格朗日对偶性是一种数学工具,它可以将一个带有约束条件的优化问题转化为一个不带约束条件的优化问题,从而简化求解过程。具体来说,我们可以定义一个拉格朗日函数(Lagrangian function)如下:

      L(w, b, \alpha) = \frac{1}{2}\|w\|^2 - \sum_{i=1}^n \alpha_i (y_i(w^Tx_i + b) - 1)

        其中αi​是拉格朗日乘子(Lagrange multiplier),用来表示约束条件的重要程度。我们可以看到,当y_i(w^Tx_i + b) \geq 1时,αi​=0,表示该数据点不对优化目标有影响;当y_i(w^Tx_i + b) = 1时,αi​>0,表示该数据点是支持向量,对优化目标有影响。因此,我们可以用αi​来表示数据点是否是支持向量。

        我们的目标是最小化L(w,b,α)关于w和b的值,同时最大化L(w,b,α)关于α的值,这样就可以得到最优的超平面和间隔。根据拉格朗日对偶性,我们可以得到如下的对偶问题:

\max_{\alpha} \min_{w, b} L(w, b, \alpha)

s.t. \quad \alpha_i \geq 0, \quad i = 1, 2, ..., n

        我们可以先求解L(w,b,α)关于w和b的最小值,然后再求解L(w,b,α)关于α的最大值。为了求解L(w,b,α)关于w和b的最小值,我们可以对L(w,b,α)分别求关于w和b的偏导数,并令其为零,得到:

\frac{\partial L(w, b, \alpha)}{\partial w} = w - \sum_{i=1}^n \alpha_i y_i x_i = 0

\frac{\partial L(w, b, \alpha)}{\partial b} = - \sum_{i=1}^n \alpha_i y_i = 0

        从而得到w和b的表达式:

w = \sum_{i=1}^n \alpha_i y_i x_i

b = y_j - \sum_{i=1}^n \alpha_i y_i x_i^T x_j

        其中j是任意一个满足αj​>0的索引,也就是任意一个支持向量的索引。将w和b的表达式代入L(w,b,α),我们可以得到L(w,b,α)关于α的最大值的表达式:

\max_{\alpha} L(w, b, \alpha) = \sum_{i=1}^n \alpha_i - \frac{1}{2} \sum_{i=1}^n \sum_{j=1}^n \alpha_i \alpha_j y_i y_j x_i^T x_j

s.t. \quad \alpha_i \geq 0, \quad i = 1, 2, ..., n

\sum_{i=1}^n

SVM的核函数

核函数和核技巧

        核函数(kernel function)是一种用来计算两个数据点在高维空间中的内积(inner product)的函数,它可以避免直接对数据进行高维的变换,从而节省计算资源和时间。核技巧(kernel trick)是一种将核函数应用到SVM的方法,它可以让SVM处理非线性的数据,也就是那些不能用一个超平面来分隔的数据。

不同的核函数

        核函数的选择取决于数据的特征和分布,不同的核函数有不同的性质和效果。常用的核函数有以下几种:

        线性核(linear kernel):K(x_i, x_j) = x_i^T x_j,这是最简单的核函数,相当于不进行任何变换,适用于线性可分的数据。

        多项式核(polynomial kernel):K(x_i, x_j) = (x_i^T x_j + c)^d,这是一种非线性的核函数,可以将数据映射到一个多项式空间,适用于数据有一定的非线性关系,其中c和d是核参数,分别表示偏置项和多项式的次数,需要根据数据的情况进行调整。

        高斯核(Gaussian kernel)或径向基核(radial basis function kernel):K(x_i, x_j) = \exp(-\frac{\|x_i - x_j\|^2}{2\sigma^2}),这是一种非线性的核函数,可以将数据映射到一个无限维的空间,适用于数据有复杂的非线性关系,其中σ是核参数,表示高斯函数的标准差,需要根据数据的情况进行调整。

        Sigmoid核(sigmoid kernel):K(x_i, x_j) = \tanh(\alpha x_i^T x_j + c),这是一种非线性的核函数,可以将数据映射到一个类似于神经网络的空间,适用于数据有一定的非线性关系,其中α和c是核参数,分别表示缩放因子和偏置项,需要根据数据的情况进行调整。

如何选择合适的核函数和核参数

        选择合适的核函数和核参数是一个重要的问题,因为它们会影响SVM的性能和泛化能力。一般来说,选择核函数和核参数的方法有以下几种:

        经验法(empirical method):根据数据的特征和分布,选择一个合理的核函数,比如线性核、多项式核、高斯核或Sigmoid核,然后用交叉验证(cross-validation)或网格搜索(grid search)等方法,来调整核参数,使得SVM在训练集和验证集上的误差最小。

        信息准则法(information criterion method):根据数据的信息量,选择一个最优的核函数,比如最小描述长度(minimum description length)或赤池信息准则(Akaike information criterion),然后用最大似然估计(maximum likelihood estimation)或贝叶斯估计(Bayesian estimation)等方法,来估计核参数,使得SVM对数据的拟合程度最高。

  • 26
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值