Java教程

分类问题常用算法——SVM概述

本文主要是介绍分类问题常用算法——SVM概述,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

SVM(支持向量机)是一种分类模型,作为机器学习中很基础的一个知识点,本文将对其进行一个较简洁并且容易理解的描述,也是自己的一个复习,若有疏漏,请多指正。

目录

场景

SVM的分类

基本模型

对偶算法

软间隔

核技巧


场景:

对一个二类分类问题:

以线性可分数据为例,需要得到一个分离超平面来使得数据正确划分并间隔最大。

SVM的分类:

可分为线性分类器和非线性分类器,线性分类器可分为硬间隔和软间隔两类,其中软间隔样本不完全线性可分。非线性分类器常利用核技巧。

基本模型:

最大间隔线性分类器:包括分离超平面、决策函数。

分离超平面:w^*x+b^*=0

决策函数:f(x)=sign(w^*x+b^*)

样本点(x_i, y_i)离分离超平面存在两种距离分别为函数间隔几何间隔

函数间隔\hat{\gamma _i}=y_i(wx_i+b)  表示正确性和确信度。

定义超平面与数据集之间的几何间隔为\hat{\gamma}=min \hat{\gamma_i}

几何间隔\gamma _i=\frac{\hat{\gamma _i}}{||w||}=y_i(\frac{w}{||w||}x_i+\frac{b}{||w||}) 是函数间隔的规范化,使得间隔确定。

定义超平面与数据集之间的几何间隔为\gamma =min\gamma _i

得到最优化问题

max \quad \gamma

s.t. \quad y_i(\frac{w}{||w||}x_i+\frac{b}{||w||}) \geq \gamma

由于\gamma _i=\frac{\hat{\gamma _i}}{||w||},原问题等价于:

max \quad \frac{\hat{\gamma_i}}{||w||}

s.t. \quad y_i(wx_i+b) \geq \hat{\gamma}

由于函数间隔的取值并不影响问题的解,故令\hat{\gamma}=1,原问题可等价于:

min \quad \frac{1}{2}||w||^2

s.t. \quad y_i(wx_i+b)-1\geq 0

这就是支持向量机中的凸优化问题,我们常说的支持向量就是使得y_i(wx_i+b)=0的点。

以图来表示:

 图中H1和H2上的点就是支持向量,H1和H2之间的距离称为间隔,w为分离超平面的法向量,H1和H2称为间隔边界。

对偶算法:

对于原始问题可构建拉格朗日函数:

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

根据拉格朗日对偶性,原始问题对偶问题是极大极小问题:

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

为了得到对偶问题的解,需要先求极小再求极大。

求极小:

\frac{\partial L}{\partial w} = w-\sum_i \alpha_iy_ix_i=0

\frac{\partial L}{\partial b} = - \sum_i \alpha_i y_i=0

代入得:

\min_{w,b}L(\alpha, w, b) = \frac{1}{2}(\sum_i \alpha_i y_i)^2-\sum_i\alpha_iy_i\sum_j \alpha_j y_j x_j \cdot x_i + \sum_i \alpha_i

                         =-\frac{1}{2} \sum_i \sum_j \alpha_i \alpha_j y_i y_j x_i x_j + \sum_i \alpha_i

所以对偶问题可化为:

\min_{\alpha} \ \frac{1}{2} \sum_i \sum_j \alpha_i \alpha_j y_i y_j (x_i \cdot x_j) - \sum_{i=1}^{N} \alpha_i

s.t.\ \sum_{i=1}^{N} \alpha_i y_i=0

       \alpha_i \geq 0

\alpha^*为对偶问题的解,w^*, \ b^*为原问题的解。

由KKT条件可得:w^*=\sum_{i=1}^{N}\alpha_i^* y_i x_i ,\ b^*=y_j-\sum_{i=1}^{N} \alpha_{i}^{*}y_ix_i\cdot x_j

推导:

\nabla_w L(w^*, b^*, \alpha^*)=w^* - \sum_{i=1}^{N} \alpha_i^* y_i x_i=0

\nabla_w L(w^*, b^*, \alpha^*)=- \sum_{i=1}^{N} \alpha_i^* y_i =0

\alpha^*_i \cdot (y_i(w^*x_i+b^*)-1)=0

y_i(w^* x_i + b^*) - 1 \geq 0

\alpha_i^* \geq 0

由于当\alpha_i^* > 0,则y_i(w^*x_i+b^*)-1=0,又因为是二分类,y_i^2=1

所以:b^*=y_i-\sum_j^N \alpha_j^* y_j x_j \cdot x_i

那么将原问题转换成对偶问题有什么优点呢?

1、对偶问题比原问题好求解

2、方便引入核函数,推广到非线性分类问题

转换成对偶问题后,支持向量为\alpha_i>0的样本;分离超平面为\sum_{i=1}^{N} \alpha_i^* y_i (x_i \cdot x) + b^*=0,分类决策函数为f(x)=sign(\sum_{i=1}^{N}\alpha_i^* y_i(x_i\cdot x)+b^*)

软间隔:

以上模型在样本点完全线性可分情况下,也就是硬间隔,那么当样本点不完全线性可分,也就是某些样本点(x_i,y_i)不能完全满足函数间隔大于等于1的约束。所以,我们可以对每个样本点引入一个松弛变量\xi _i,使得函数间隔加上松弛变量大于等于1。同时,对每个松弛变量支付一个代价\xi _i。所以原问题变为:

min\ \frac{1}{2} ||w||^2+C\cdot \sum_{i=1}^{N} \xi_i

s.t.\ y_i(w x_i+b) \geq 1-\xi_i

       \xi_i \geq 0

软间隔对偶问题与硬间隔类似,这里暂且略过。

核技巧:

在非线性问题中,把x从原空间通过一个函数\varphi映射到特征空间中,在新空间用线性分类学习方法学习分类模型。

核函数定义:设原空间为\chi \in R^2,使得对所有x,z\in \chi,函数K(x,z)满足条件K(x,z)=\phi (x)\cdot \phi(z)

因为单独计算\varphi (x)不太容易,所以核技巧想法就是不显式地定义映射函数,直接计算K(x,z)

支持向量机中,对偶问题目标函数可用核函数表示为:

W(\alpha)=\frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}\alpha_i\alpha_j y_i y_j K(x_i,x_j)-\sum_{i=1}^{N}\alpha_i

分类决策函数为:

f(x)=sign(\sum_{i=1}^{N_s}\alpha_i^*y_i\phi (x_i)\phi(x)+b^*)=sign(\sum_{i=1}^{N_s} \alpha_i^* y_i K(x_i, x)+b^*)

也就是说,当核函数K(x,z)给定时,可以利用解线性分类问题的方法求解非线性问题的支持向量机。并且学习是在特征空间中隐式地进行,不需要定义特征空间和映射函数。

这篇关于分类问题常用算法——SVM概述的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!