• 支持向量机之线性可分向量机


    一、支持向量机简介

    支持向量机(support vector machines,SVM)是一种二类分类模型。它的基本模型是定义在特征空间上的间隔最大的线性分类器,间隔最大使它有别于感知机;支持向量机还包括核技巧,这使它成为实质上的非线性分类器。当训练数据线性可分时,通过硬间隔最大化(hard margin maximization),学习一个线性的分类器,即线性可分支持向量机,又称为硬间隔支持向量机;当训练数据近似线性可分时,通过软间隔最大化(soft margin maximization),也学习一个线性的分类器,即线性支持向量机,又称为软间隔支持向量机;当训练数据线性不可分时,通过使用核技巧(kernel trick)及软间隔最大化,学习非线性支持向量机。

    二、函数间隔和集合间隔

    支持向量机通过样本距离超平面的距离来衡量预测的确定性或者准确性;例如下边的图中,A点预测的确信度相对B和C更大;

    image

    我们设最终确定的分离超平面为

    wx+b=0
    wx+b=0

    我们设 y=1y=1 表示正类, y=1 表示负类,相应的分类决策函数为

    f(x)=sign(wx+b)

    则样本点 (xi,yi) 到分割超平面的距离称为函数距离

    ˆγi=yi(wxi+b)

    则训练集关于超平面的函数间隔为所有样本点中函数间隔最小的值

    ˆγ=mini=1,,Nˆγi

    虽然函数间隔可以表征分类预测的正确性和确认度,但是由于同一个超平面存在不同的参数组合,导致函数距离不唯一,所以我们需要对超平面的法向量进行归一化,从而得到几何间隔

    γi=yi(wwxi+bw)

    同样训练集关于超平面的几何间隔为所有样本点中几何间隔最小的值

    γ=mini=1,,Nγi

    三、几何间隔最大化

    对训练数据集找到几何间隔最大的超平面意味着以充分大的确信度对训练数据进行分类。也就是说,不仅将正负实例点分开,而且对最难分的实例点(离超平面最近的点)也有足够大的确信度将它们分开。这样的超平面应该对未知的新实例有很好的分类预测能力。

    几何间隔最大化,即我们希望最大化超平面 (w,b) 关于训练数据集的几何间隔 γ ,约束条件表示的是超平面$ (w, b) \gamma $

    maxw,bγ s.t. yi(wwxi+bw)γ,i=1,2,,N

    使用函数距离替换集合距离

    maxw,bˆγw s.t. yi(wxi+b)ˆγ,i=1,2,,N

    由于超平面的两个参数可以成比例的随意变化,导致函数距离可以取任何值,但是最终结果并不影响约束条件和目标函数,故我们直接取 ˆγ=1,同时将最大化改为最小化,则最优化问题变为

    minw,b12w2 s.t. yi(wxi+b)10,i=1,2,,N

    如果我们计算得到这个最优化问题的解 $ w*,b* $,那么我们就得到了分离超平面和分类决策函数;

    四、支持向量

    在线性可分情况下,训练数据集的样本点中与分离超平面距离最近的样本点的实例称为支持向量(support vector)。在决定分离超平面时只有支持向量起作用,而其他实例点并不起作用。如果移动支持向量将改变所求的解;但是如果在间隔边界以外移动其他实例点,甚至去掉这些点,则解是不会改变的。由于支持向量在确定分离超平面中起着决定性作用,所以将这种分类模型称为支持向量机。支持向量的个数一般很少,所以支持向量机由很少的“重要的”训练样本确定。

    五、通过对偶算法求解最大化间隔

    为了求解线性可分支持向量机的最优化问题,将它作为原始最优化问题,应用拉格朗日对偶性原始问题的最优解,这就是线性可分支持向量机的对偶算法(dual algorithm)。

    通过引入拉格朗日乘子构建拉格朗日函数

    L(w,b,α)=12w2Ni=1αiyi(wxi+b)+Ni=1αi

    根据拉格朗日对偶性,原始问题的对偶问题是极大极小问题

    maxαminw,bL(w,b,α)

    分别对两个参数计算偏导计算极小值

    wL(w,b,α)=wNi=1αiyixi=0bL(w,b,α)=Ni=1αiyi=0

    计算得到

    w=Ni=1αiyixiNi=1αiyi=0

    将其带入上边构建的拉格朗日函数

    L(w,b,α)=12Ni=1Nj=1αiαjyiyj(xixj)Ni=1αiyi((Nj=1αjyjxj)xi+b)+Ni=1αi=12Ni=1Nj=1αiαjyiyj(xixj)+Ni=1αi

    接下来计算最大值部分

    maxα12Ni=1Nj=1αiαjyiyj(xixj)+Ni=1αi s.t. Ni=1αiyi=0αi0,i=1,2,,N

    转化为等效的计算极小问题

    minα12Ni=1Nj=1αiαjyiyj(xixj)Ni=1αi s.t. i=1αiyi=0αi0,i=1,2,,N

    对线性可分训练数据集,假设对偶最优化问题对α的解为

    α=(α1,α2,,αl)T

    则存在下标j,使得 $ \alpha_{j}^{}>0 w^{}, b^{*} $

    w=Ni=1αiyixib=yjNi=1αiyi(xixj)

    由此可得分离超平面

    Ni=1αiyi(xxi)+b=0

    可得分类决策函数

    f(x)=sign(Ni=1αiyi(xxi)+b)

    可以看到线性可分支持向量机的对偶形式只依赖于输入x和训练样本输入的内积。通过上边$ w^{}, b^{} \alpha_{j}^{*}>0 $ 对应的训练样本点,这些样本点就是支持向量;

    六、算法示例

    from sklearn.datasets import load_iris
    from sklearn.svm import LinearSVC
    from sklearn.pipeline import Pipeline
    from sklearn.preprocessing import StandardScaler
    
    x, y = load_iris(return_X_y= True)
    svc = Pipeline([
        ('scaler',StandardScaler()),
        ('linear_svc', LinearSVC(C=float('inf'), loss='hinge'))
    ])
    svc = svc.fit(x, y)
    print(svc.predict(x))
    print(svc.score(x, y))
    
    # [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    #  0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
    #  1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
    #  2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2
    #  2 2]
    # 0.9866666666666667
    
  • 相关阅读:
    springboot+jsp公司员工考勤管理系统
    学习Nginx,跟着阿里大牛走,一套精心整理的Nginx(PDF文档)
    原生Hadoop3.X高可用配置方式
    JavaEE——Java线程的几种状态
    【pandas基础】--目录(完结)
    截取字符串中的部分信息
    stm32的ADC采样率如何通过Time定时器进行控制
    c++ 常用STL 之set
    开机explorer.exe无法正常启动,先运行Chrome后再运行explorer.exe可恢复正常,是什么原因?
    阿里云企业版实例迁移工具最佳实践
  • 原文地址:https://www.cnblogs.com/wufengtinghai/p/16201761.html