zoukankan      html  css  js  c++  java
  • 支持向量机——内核

    对于非线性“Decision Boundary”

    如果用传统的多项式回归,有

    [{h_ heta }left( x ight) = { heta _0} + { heta _1}{x_1} + { heta _2}{x_2} + { heta _3}{x_1}{x_2} + { heta _4}x_1^2 + { heta _5}x_2^2 +  cdot  cdot  cdot ]

    并且,想要

    [{h_ heta }left( x ight) = left{ {egin{array}{*{20}{c}}
    {egin{array}{*{20}{c}}
    1&{{ heta _0} + { heta _1}{x_1} + cdot cdot cdot ge 0}
    end{array}}\
    {egin{array}{*{20}{c}}
    0&{{ heta _0} + { heta _1}{x_1} + cdot cdot cdot < 0}
    end{array}}
    end{array}} ight.]

    这时,把hθ(x)写成如下形式

    [egin{array}{l}
    {h_ heta }left( x ight) = { heta _0} + { heta _1}{f_1} + { heta _2}{f_2} + { heta _3}{f_3} + { heta _4}{f_4} + { heta _5}{f_5} + cdot cdot cdot \
    {f_1} = {x_1},{f_2} = {x_2},{f_3} = {x_1}{x_2},{f_4} = x_1^2,{f_5} = x_2^2,...
    end{array}]

    那么问题来了,有没有与这些f不同或比现在这些f更好的选择呢?(比“相乘”、“平方”等更好或不同)


    内核

    这里为了方便理解,在给定x的情况下,只计算三个新的特征。

    这三个特征是根据三个给定的“landmarks”:l(1),l(2),l(3)计算出来的(“landmarks”如何确定稍后再说)。

    这里假设x只有两个特征x1和x2(这里忽略x0=1)

    给出x后,分别计算x与l(1),l(2),l(3)的“similarity”

    [egin{array}{l}
    {f_1} = similarityleft( {x,{l^{left( 1 ight)}}} ight) = exp left( { - frac{{{{left| {x - {l^{left( 1 ight)}}} ight|}^2}}}{{2{sigma ^2}}}} ight)\
    {f_2} = similarityleft( {x,{l^{left( 2 ight)}}} ight) = exp left( { - frac{{{{left| {x - {l^{left( 2 ight)}}} ight|}^2}}}{{2{sigma ^2}}}} ight)\
    {f_3} = similarityleft( {x,{l^{left( 3 ight)}}} ight) = exp left( { - frac{{{{left| {x - {l^{left( 3 ight)}}} ight|}^2}}}{{2{sigma ^2}}}} ight)
    end{array}]

    这里的“similarity”函数就是“内核”,这种内核又称为“高斯内核”。

    这个内核函数的作用是什么?

    对于

    [{f_1} = similarityleft( {x,{l^{left( 1 ight)}}} ight) = exp left( { - frac{{{{left| {x - {l^{left( 1 ight)}}} ight|}^2}}}{{2{sigma ^2}}}} ight) = exp left( { - frac{{sumlimits_{j = 1}^n {{{left( {{x_j} - l_j^{left( 1 ight)}} ight)}^2}} }}{{2{sigma ^2}}}} ight)]

    当x≈l(1)时:

    [{f_1} approx exp left( { - frac{{{0^2}}}{{2{sigma ^2}}}} ight) approx 1]

    当x距离l(1)比较远时

     [{f_1} approx exp left( { - frac{{larg enumbe{r^2}}}{{2{sigma ^2}}}} ight) approx 0]

    同理,可以得到x与经过“内核”函数后的结果。

    用图比较直观的理解

    假设

    [egin{array}{l}
    {l^{left( 1 ight)}} = left[ {egin{array}{*{20}{c}}
    3\
    5
    end{array}} ight]\
    {f_1} = exp left( { - frac{{{{left| {x - {l^{left( 1 ight)}}} ight|}^2}}}{{2{sigma ^2}}}} ight)
    end{array}]

    当σ2=1时

    内核函数的示意图如图中上半部分,可以看出当x距离l(1)越近,f1越接近于1,越远越接近于0.

    而对于不同的σ来说,图形的形状不相同

    当σ2=0.5时

    当σ2=3时

    它们的区别在于当x距离l距离变化时f的变化“快慢”不同。


    举具体例子

    给出x;给出l(1),l(2),l(3)

    支持向量机会计算f1,f2,f3

    现假设经过训练后得到的参数值θ0=-0.5,θ1=1,θ2=1,θ3=0。

    则当x距离l(1)较近时(图中红点)f1≈1,f2≈0,f3≈0,hθ(x)≈0.5≥0,则预测结果为1

    同理当为图中绿点时,预测结果为0;黄点时,预测结果为1.

    最终支持向量机会得到如图黑色曲线那样的“Decision Boundary”。


    如何选定l?

    支持向量机会选取所有的样本作为l,也就是如果有m个样本,既有m个l(1),...,l(m)

    经过处理后,支持向量机现在的任务是

    [underbrace {min }_ heta left{ {Cleft[ {sumlimits_{i = 1}^m {{y^{left( i ight)}}{mathop{ m Cos} olimits} {t_1}left( {{ heta ^T}{f^{left( i ight)}}} ight) + left( {1 - {y^{left( i ight)}}} ight){mathop{ m Cos} olimits} {t_0}left( {{ heta ^T}{f^{left( i ight)}}} ight)} } ight] + frac{1}{2}sumlimits_{j = 1}^n { heta _j^2} } ight}]


    SVM的参数选择

    对于C(相当于1/λ):

    • 比较大的C,会出现“低偏差”,“高方差”。这会陷入“过拟合”情况;
    • 比较小的C,会出现“高偏差”,“低方差”,这会陷入“欠拟合”情况。

    对于σ2

    比较大的σ2,特征f会变化的比较“顺滑”,会出现“高偏差”,“低方差”,这会陷入“欠拟合”情况;

    比较小的σ2,特征f会变化的比较“快速”,会出现“低偏差”,“高方差”。这会陷入“过拟合”情况。


    内核选择

    除了高斯内核,还有:

    • “线性内核”,也就是没有内核(θTx)
    • “多项式内核”
    • String kernel
    • chi-square kernel
    • histogram
    • intersection kernel
    • .
    • .

    多分类

    • SVM包中会内置多分类功能
    • 可以用“one-vs-all”方法(将别的所有类看成一类)。

    逻辑回归 VS. SVMs

    • n = 特征的数量,m = 训练样本的数量。
    • 当 n 比较大(相对于m)时,用逻辑回归或者SVM的“线性内核”版本;
    • 当 n 比较小,m 不是非常大时,用SVM的“高斯内核”版本;
    • 当 n 比较小,m 非常大时,创造/增加 n ,然后用用逻辑回归或者SVM的“线性内核”(或者“无内核”)版本;
    • 神经网络(插一脚)对于上面这些情况都能很好的工作,但是可能会训练比较慢;
    • SVM的“代价函数”是凸函数,所以不需要担心陷入局部最小的问题。
  • 相关阅读:
    怎么把自己电脑上的文件传到服务器本地上
    查看hive中某个表中的数据、表结构及所在路径
    python2.7读汉字的时候出现乱码,如何解决
    如何连接服务器客户端
    java常用问题排查工具
    netty源码分析之一:server的启动
    java AQS 一:
    netty源码分析之二:accept请求
    java Resource
    二:基础概述netty
  • 原文地址:https://www.cnblogs.com/qkloveslife/p/9900278.html
Copyright © 2011-2022 走看看