zoukankan      html  css  js  c++  java
  • 支持向量机 SVM 学习笔记

    概述

    通常支持向量机用于分类,如下图中两类点。

    显然,可以正确分类的直线有很多,如紫色的直线和灰色的直线,但是在测试时,紫色的直线更不容易出错,我们希望支持向量机找的就是这类超平面。

    线性可分

    线性可分和线性不可分很好理解,顾名思义,在某些情况下由于噪声的影响,本来两类互不交叉的点混到一起了。

    我们需要找的是图中紫色的线。它的特征就是两侧(类)点中到它距离最近的点距离最远。

    图中距离较远的点,对这个平面没有影响,我们称这些有影响的点,也就是距离最近的点,为支持向量(G、H、M)。

    (x)形如(egin{bmatrix} x_1 \ x_2 \ vdots \ x_n end{bmatrix})(w)形如(egin{bmatrix} w_1 \ w_2 \ vdots \w_n end{bmatrix})

    定义:

    • 函数距离:

    [y^i(w^T x^i + b) ]

    • 几何距离:

    [frac{y_i(w^T x^i + b)}{||w||_2} ]

    现在我们要做的,其实就是最大化几何距离,这样在线性可分情况下就可以最大化两类点到超平面的最小距离。

    [max_{w, b} frac{y^i(w^T x^i + b)}{||w||_2} ]

    由于我们最大化的是最小距离,所以可以规定一个最小的距离限制(lambda '),一般取1即可。

    [max_{w,b} frac{1}{||w||_2}\ ext{s.t. } y^i (w^T x^i + b) geq 1 ]

    等价于

    [min_{w,b} frac{1}{2}||w||^2_2\ ext{s.t. } y^i (w^T x^i + b) geq 1 ag{2.1} ]

    拉格朗日乘子法

    [min_{x} f(x)\ ext{s.t. } g_i(x) = 0 quad i=0, 1, 2dots n ]

    构造拉格朗日函数

    [L(x, alpha) = f(x) + sum_i alpha_i g_i(x) ]

    计算(min_{x, alpha} L(x, alpha))

    [frac{partial L}{x_i} = 0 quad i=0,1,2dots n\ frac{partial L}{alpha_i} = 0 quad i=0,1,2dots m ]

    [min_{x, y} x^2 + y^2\ ext{s.t. } xy = 3 ]

    构造拉格朗日函数

    [L = x ^2 + y^2 + alpha (xy - 3) ]

    [left { egin{matrix} frac{partial L}{partial x} = 2x+alpha y = 0\ frac{partial L}{partial y} = 2y + alpha x = 0\ frac{partial L}{partial alpha} = xy - 3 = 0 end{matrix} ight . ]

    解得( left { egin{matrix} x = sqrt{3}\ y = sqrt{3} end{matrix} ight .)(left { egin{matrix}x = -sqrt{3}\y = -sqrt{3}end{matrix} ight .)

    对于含有不等条件的约束

    [egin{align} & min_{x}f(x)\ ext{s.t. } & g_i(x) = 0 quad i=0,1,2dots\ & h_i(x) leq 0 quad i=0,1,2dots end{align} ag{2.2} ]

    构造拉格朗日函数

    [L(x, alpha, eta) = f(x) + sum_i alpha_i g_i(x) + sum_j eta_j h_i(x)\ eta_j geq 0 quad j=1,2dots ]

    若两个约束是可行的

    [max_{alpha, eta} L(x, alpha, eta) = left { egin{matrix} f(x) & ext{满足约束}\ infty & ext{otherwise} end{matrix} ight . ]

    所以(max_{alpha, eta} L(x, alpha, eta) = f(x)),原始问题的解可以通过求解对偶问题得到

    [min_{x} max_{alpha, eta} L(x, alpha, eta) ]

    在满足slater条件下,原始问题的解和对偶问题的解是等效的,即(min_{x} max_{alpha, eta} L(x, alpha, eta))(max_{alpha, eta} min_{x} L(x, alpha, eta))有相同的解(hat x)

    现在我们去求解((2.1))式。

    构造拉格朗日函数

    [egin{align}L(w, b, alpha, eta) = & frac{1}{2}||w||^2 + sum_i alpha_i (1 - y^i (w^T x^i + b))\ ext{s.t. } & alpha_i geq 0\& 1 - y^i (w^T x^i + b) leq 0end{align} ag{2.2} ]

    [frac{partial L}{partial w} = w - sum_i alpha_i x^i y^i = 0\frac{partial L}{partial b} = -sum_i alpha_i y^i = 0 ag{2.3} ]

    ((2.3))代入((2.2))

    [min_{w, b} L(w,b,alpha) = min_{w, b} -frac{1}{2}sum_i sum_j alpha_i alpha_j y^i y^j {x^i}^{T} x^j + sum_i alpha_i ag{2.4} ]

    ((2.4))求关于(alpha)的最大值过程可以使用SMO算法。

    假设最优值已经解出

    [hat w = sum_i alpha_i y^i x^i ag{2.5} ]

    ((2.5))可以观察出,只有(alpha_i eq 0)的点,(x^i, y^i)才对(w)的值有影响,这些点我们称为支持向量

    线性不可分

    如图这样的数据点分布就是线性不可分的。

    我们定义如下函数来作为错误分类的量化值。

    [xi_i = max (0, 1-y^i (w^T x^i + b)) ]

    [egin{align}& min frac{1}{2}||w||^2 + C sum_i xi_i\ ext{s.t. } & xi_i geq 0\& xi_i geq 1 - y^i(w^T x^i + b)end{align} ]

    构造拉格朗日函数

    [L(w, b, alpha, eta, xi) = frac{1}{2}||w||^2 + Csum_i xi_i + sum_i alpha_i (-xi_i+1-y^i(w^Tx^i + b)) - sum_i eta_i xi_i ]

    求解方法和线性可分情况下是一样的。

    其中不同参数情形请参考下图。

    非线性分类

    如图是线性不可分的数据,但是这样一个圆可以把数据分的很好。

    虽然没办法直接用线性平面将两类点分开,但是只要对数据做一个映射,就变得可分了。

    [egin{pmatrix} x \ y end{pmatrix} ightarrow egin{pmatrix} x^2 \ (y-2)^2 end{pmatrix} ]

    核函数

    (X)是输入空间,(H)是特征空间,如果存在一个(X)(H)的映射

    [phi(x):X ightarrow H ]

    使得所有的(x,z in X),函数(K(x,z))满足

    [K(x,z) = phi(x) cdot phi(z) ]

    则称(K(x,z))为核函数,(phi(x))为映射函数。

    再回顾一下之前的两种情形。由于最后要用SMO算法计算的式子形如

    [egin{align} min_{alpha} & frac{1}{2} sum_i sum_j alpha_i alpha_j y^i y^j K(x^i, x^j) - sum_i alpha_i\ ext{s.t. } & sum_i alpha_i y^i = 0\ & alpha_i geq 0 end{align} ]

    对输入数据决策,形如

    [y_{predict} = ext{sign} (sum_{i in SV} y^i alpha_i K(x, x^i) + b) ]

    所以,我们并不需要明确知道(phi(x))是什么映射,只需要知道核函数就可以了。

    一种很常见的核函数是高斯核函数。

    [K(x, z) = exp(-frac{||x-z||^2}{2sigma^2}) ]

    参考

    看了这篇文章你还不懂SVM你就来打我

    拉格朗日对偶性

    一个人没有梦想,和咸鱼有什么区别!
  • 相关阅读:
    OGRE源代码resource分析
    全排列
    各种让人无语的库
    python Kmeans算法
    Linux服务器安装MariaDB数据库
    初探SEO,BSP收录速度测试
    MetaWeblog API调用
    Patterns
    腾讯。。。对Linux的支持程度直接扼杀了Linux在国内用户群的增长
    个人电子商务网站建设之——整站静态化实现的选择、设计与实现(二):静态页面的实现方式;
  • 原文地址:https://www.cnblogs.com/TABball/p/13175547.html
Copyright © 2011-2022 走看看