zoukankan      html  css  js  c++  java
  • SVM

    SVM

    什么是超平面

    • 超平面的表达式为(omega^Tx+b=0), 其中(omega)为超平面的一个法向量, b为超平面的偏移量
    • 更多:
      • 在几何中, 直线, 平面, 超平面无一例外都可以被表示成( heta^Tx+b=0)或者(omega^Tx+b=0), 其中, 因为x没有包含偏移量, 所有加上一个b, ( heta)(omega)为系数向量, 其实就是对应的平面或者直线的法向量, 这里很能有一些人不能理解为什么(omega)成了法向量了, 下面给一个例子
      • 一个平面方程: (Ax_1+Bx_2+Cx_3+D=0)
      • 首先, 如果我们学过高等数学的话, 希望还记得(A, B, C)就是这个平面的法向量这个结论, 这样的话, ((A, B, C)^T(x_1, x_2, x_3)=0), 截距(D)是不影响的, 显然(omega^Tx=0), (omega)为平面的法向量
      • 下面来推导
        • ((x_0, y_0, z_0))是平面(Ax_1+Bx_2+Cx_3+D=0)上的一点, 则有方程$$Ax_0+By_0+Cz_0+D=0$$
        • 则可以有$$A(x_1-x_0)+B(x_2-y_0)+C(x_3-z_0)=0$$
        • 将上述的方程写成向量式为((A, B, C)^T(x_1-x_0, x_2-y_0, x_3-z_0)=0), 显然((x_1-x_0, x_2-y_0, x_3-z_0))为平面(Ax_1+Bx_2+Cx_3+D=0)上的一条直线, 向量((A, B, C))与他的内积为0表示((A, B, C))为平面(Ax_1+Bx_2+Cx_3+D=0)的法向量
        • 将平面方程写成((A, B, C)^T(x_1, x_2, x_3)+D=0), 进一步的, (omega^Tx+D=0), 在上面一步我们一定得出了(omega)为平面的法向量, (x)为平面上的一条直线

    SVM类型

    • 线性可分SVM

      • 在不修改维度的前提下, 可以线性的分隔, 得到一个线性分类器
    • 非线性SVM

      • 在不修改维度的前提下, 不能通过线性的分隔所有的样本, 如果需要需要分类样本需要借助核函数
      • 核函数将当前的特征的维度进行映射, 映射到一个高维度
    • SVM是一个二次规划问题

      • 目标函数(min({1over{2}}||omega||^{2}))
      • 约束为

        [egin{cases} omega^Tx_0+b >= 1 & if & y = +1 \ omega^Tx_0+b <= -1 & if & y = -1 end{cases} ]

      • 上面是多个式子, 通过一个技巧将多个式子合成一个
        • (y(omega^Tx_0)+b)>=1), 这个就是我们的新的约束条件, 只要(y(omega^Tx_0+b)<1)则超平面(omega^Tx+b)不符合我们的要求; 如果(y(omega^Tx_0+b)>=1)则超平面(omega^Tx+b)确实符合我们的约束条件, 但是不一定符合(min({1over{2}}||omega||^{2})), 所有可能有多个超平面符合约束条件但是不是最优的

    凸优化

    • 对于式子
      • [min({1over{2}}||omega||^{2}) ]

      • [ egin{cases} omega^Tx_0+b >= 1 & if & y = +1 \ omega^Tx_0+b <= -1 & if & y = -1 end{cases} ]

    • 目标函数是二次的, 约束条件是线性的, 使用拉格朗日乘数法计算
      • (L(omega, alpha, eta)=f(omega)+sum_{i=1}^{k}alpha_{i}g_i(x)+sum_{i=1}^{k}eta_ih_i(x))
      • 得到最终的目标函数(L(omega, b, alpha)=min({1over{2}}||omega||^{2})-sum_{i=1}^{m}{alpha_i}(y^{i}(omega^Tx_i+b)-1)), 其中(y^{i}(omega^Tx_i+b)-1)是约束条件的进行简单变换的形式, (alpha)为拉格朗日因子
      • 现在我们只需要求出(min(L(omega, b, alpha)))即可
      • 因为要求极值, 就要求出偏导, 在这里, 分别对(omega)(b)求偏导, 得到

        [egin{cases} omega=sum_{i=1}^{m}{alpha}y^{i}x^{i} & (1) & 对omega的偏导\ sum_{i=1}^{m}alpha_{i}y^{i}=0 & (2) & 对b的偏导 end{cases} ]

      • 将公式(1)和(2)带入到目标函数中, 消掉(omega)(b), 这样就得到了一个只含有(alpha)的式子了, 因为(1)告诉我们(omega)(alpha)的关系, 所有只要求出(alpha)就可以得出(omega)(b), 有了(omega)(b)就能计算出最优的超平面了
      • 关于计算出最终的结果, 需要使用SMO算法
      • 额外的, 如果我们不对原始的问题添加松弛变量的话, 则会导致过拟合的现象, 所有我们还需要修改原始公式添加松弛变量和正则化参数

    拉格朗日乘数法(二次优化问题)

    • 拉格朗日乘数法知识将原始的问题转换了一下, 我们并不是通过拉格朗日求出最后的结果, 而是为了使用SMO(一个流弊的算法)求出最后的结果做准备
    • 借别人的话就是
      • 分类间隔,引入SVM。
      • 使用拉格朗日乘子来简化SVM问题的优化。
      • 非线性分类(核函数)以及松弛变量。
      • SMO算法实现简单的SVM分类器。

    Hinge + L2损失函数

    • 这是从另外给一个角度解决SVM

    MATLAB实现SVM

    • 将原始问题转换为拉格朗日对偶式, 显然这个也是一个二次规划问题, 调用matlab自带的qualprog函数得到支持向量(得到(alpha)的解)
  • 相关阅读:
    Java转大数据开发全套视频资料
    Java注解Annotation的用法
    SpringBoot集成CAS单点登录,SSO单点登录,CAS单点登录(视频资料分享篇)
    零基础如何学习Java和web前端
    如何看待B站疑似源码泄漏的问题?
    如何自学编程,零基础适合学习Java或者Web前端吗,非科班的能学java吗?
    Spring中常用的注解,你知道几个呢?
    学习分布式系统需要怎样的知识?
    程序员如何学习互联网前言技术呢,我给你10个建议
    回看面试中的这些坑,你踩过几个?
  • 原文地址:https://www.cnblogs.com/megachen/p/10018497.html
Copyright © 2011-2022 走看看