zoukankan      html  css  js  c++  java
  • 支持向量机(SVM)(六)--核函数

    线性SVM一文中提到,线性可分时b的求解。但是在线性不可分情形下,如下二维平面图,无法找到一条直线将红蓝色样本点完全分开

    SVM提出了一个解决办法,就是把低维的特征投影到高维空间使得样本可以一分为二,例如下动图所示。

    回顾上一节软间隔,我们得到优化目标

    $underset{a}{min}=frac{1}{2}sum sum a_{i}a_{j}y_{i}y_{j}x_{i}cdot x_{j}-sum a_{i}$

            $s.t sum a_{i}y_{i}=0$

            $0leqslant alpha _{i}leqslant C$

    那么按照低维到高维的思想, 我们在$x_{i}cdot x_{j}$一个函数变化$phi $,使得样本维度变高,然后再做內积,即$phi(x_{i}) cdotphi(x_{j})$

    也就是$underset{a}{min}=frac{1}{2}sum sum a_{i}a_{j}y_{i}y_{j}phi(x_{i}) cdotphi(x_{j})-sum a_{i}$

            $s.t sum a_{i}y_{i}=0$

            $0leqslant alpha _{i}leqslant C$

    这样似乎简单粗暴地将线性不可分问题就解决了,但是人们很快发现这个方法的缺陷,当样本本身维度就很高时,再将样本特征映射到更高维,

    计算量明显增大,甚至出现无穷维。

    那么这时候核函数隆重登场!


    举一个简单例子说明核函数(kernel function)的神奇之处

    样本X1(a1,a2),X2(b1,,b2)

    将二维特征投影到六维变成

    X'1(1,√2a1,√2a2,a12,a22,√2a1a2)

    X'2(1,√2b1,√2b2,b12,b22,√2b1b2)

    X1'•X2'=1+2a1b1+2a2b2+a12b12+a22b22+2a1b1a2b2(高维空间做內积)

    K(Xi,Xj=(Xi•Xj+1)2=(a1b1+a2b2+1)2=1+2a1b1+2a2b2+a12b12+a22b22+2a1b1a2b2

    可以看出红色部分完全相同。

    但是使用核函数求內积时,仅仅输入的是二维数据,但是和高维向量X1'和X2'的內积完全相同。

    至于常见的核函数,参考https://blog.csdn.net/kateyabc/article/details/79980880


    所以我们再将$phi(x_{i}) cdotphi(x_{j})$变成$mathbf{K}(x_{i},x_{j})$

    整理算法过程:

    $underset{a}{min}=frac{1}{2}sum sum a_{i}a_{j}y_{i}y_{j}mathbf{K}(x_{i},x_{j})-sum a_{i}$

            $s.t sum a_{i}y_{i}=0$

            $0leqslant alpha _{i}leqslant C$

    1,根据SMO得到α*

    2,根据$w = sum a^{*}y_{i}phi(x_{i})$有$w^{*}phi(x_{j}) = sum a^{*}y_{i}phi(x_{i})phi(x_{j})$,这里不必得到显式的w,而且,$phi(x)$往往我们也不知道

    3,根据$0<αi<C,找到所有支持向量上的点,小标为s,有

    $y_{s}left ( sum alpha _{i}y_{i} Kleft ( x_{i},x_{s} ight )+b ight )=1$

    其中的$sum a_{i}y_{i}phi(x_{i})phi(x_{j})$为已知,所以可求得b,将b求平均得到b*

    4,最终超平面为

    $sum alpha ^{*}y_{i}K(x_{i},x_{j})+b^{*}=0$

    对于核函数的定义低维的输入空间(欧式空间子集)到高维的希尔伯特空间的映射。参考这篇博文。简单理解不影响理解SVM即可。

    Valar morghulis
  • 相关阅读:
    sql server 中 bit 字段的 查询方法
    C# 4.0新特性"协变"与"逆变"以及背后的编程思想
    marginleft是做边距,是宽度 left是定位盒子左上角左边位置的一个点
    什么是企业库 怎么使用企业库 企业库的好处 企业库的目标
    SQL各种Join用法(Full,Left,Out,Inner)
    JavaScript计算两个文本框内数据的乘积(四舍五入保留两位小数)
    SQL VIEW(视图)
    Sql ISNULL() 函数
    left join 和 left outer join 有什么区别
    18个不常见的C#关键字,您使用过几个?
  • 原文地址:https://www.cnblogs.com/super-yb/p/10853436.html
Copyright © 2011-2022 走看看