• SVM-支持向量机算法


     Support Vector Machine

    要解决的问题:什么样的决策边界才是最好的呢?支持向量机
    特征数据本身如果就很难分,怎么办呢?
    计算复杂度怎么样?能实际应用吗?
    目标:基于上述问题对SVM进行推导

     

     

     决策边界:选出来离雷区最远的(雷区就是边界上的点,要Large Margin)

     

     

    距离的计算

    .距离 = 向量(x-x')在平面法向量(W)上的投影

     

    把a换成(x-x'),把b换成WT

     

     

     

     数据标签定义

    数据集:(X1,Y1)(X2,Y2)…(Xn,Yn)支持向量机

    Y为样本的类别:当Xi为正例时候Yi = +1 当Xi为负例时候Yi = -1

    决策方程:

     

     

    优化的目标

    通俗解释:找到一个条线(w和b),使得离该线最近的点(雷区)能够最远

    将点到直线的距离化简得:

    由于所以将绝对值展开原始依旧成立

     

     

     

     目标函数

     

    放缩变换:对于决策方程(w,b)可以通过放缩使得其结果值|Y|>= 1=>

    (之前我们认为恒大于0,现在严格了些)

     

    优化目标:

    由于

    那么他的min值就是1

    只需要考虑

    (目标函数搞定!)

    自己的理解:

    在决策边界的方向不变的情况下,决策边界无论离雷区(数据集)有多远,X的分布不会变,所以距离决策边界最近的X,永远是那一个

    也不肯能无限远离,因为分类后,另外一类的X限制了决策边界原理的距离,

    这个公式的目的在于如果分成2类A,B,那么决策边界无限远离B是不可能的,因为决策边界不可能跨越A,

    目的在于将AB分开后,用来区分B的边界,无限接近于A,也就是说要一个离B最突出的点最远的分界线,

    同理,用来区分A的边界,无限接近于B,也就是说要一个离A最突出的点最远的分界线。

     

     

    常规套路:将求解极大值问题转换成极小值问题

    1/W的最大值,也就是求W的最小值,也就是求W^2的最小值

    如何求解:应用拉格朗日乘子法求解

    拉格朗日乘子法:

    带约束的优化问题:

     

     原式转换:

    我们的式子:

    约束条件不要忘:

     

    SVM求解

    分别对w和b求偏导,分别得到两个条件(由于对偶性质)

    对w求偏导:

     

    对b求偏导:

     

    带入原始:

    其中

                     

    继续对ɑ求极大值:

    条件:

    极大值转换成求极小值:

    条件:

     

     

     SVM求解实例

    数据:3个点,其中正例X1(3,3) ,X2(4,3) ,负例X3(1,1)

    求解:

    约束条件:

    分别对ɑ1和ɑ2求偏导,偏导等于0可得:

    并不满足约束条件

    所以解应在边界上

    α2 = 0,叫做非支持向量,对于边界起作用的点叫做向量,也就是α不是0的点

    支持向量:真正发挥作用的数据点,ɑ值不为0的点

     

     

     

     soft-margin

    软间隔:有时候数据中有一些噪音点,如果考虑它们咱们的线就不太好了

    之前的方法要求要把两类点完全分得开,这个要求有点过于严格了,我们来放松一点!

    为了解决该问题,引入松弛因子

     

    新的目标函数:

    当C趋近于很大时:意味着分类严格不能有错误

    当C趋近于很小时:意味着可以有更大的错误容忍

    C是我们需要指定的一个参数!

     

     

     

     

     

     

     低维不可分问题

    核变换:既然低维的时候不可分,那我给它映射到高维呢?

    目标:找到一种变换的方法,也就是

     

     

     所以加上核变换的向量机就可以成为一个非线性的支持向量机了

    高斯核函数:

    线性核函数:

     

    高斯核函数

     

  • 相关阅读:
    分享一个动态生成RDLC报表的类
    第一次写这么长的js
    [SpringCloud]Gateway入门
    [SpringCloud]Hystrix
    [SpringCloud]Eureka+OpenFeign
    [Java]Socket API编写一个简单的私聊和群聊
    JVM内存分区和各分区溢出测试
    使用Python操作neo4j和画柱状图
    JDK1.8 HashMap为什么在链表长度为8的时候转红黑树,为啥不能是9是10?
    Redis过期策略
  • 原文地址:https://www.cnblogs.com/Mjerry/p/9751519.html
Copyright © 2020-2023  润新知