美文网首页机器学习Machine Learning & Data Analysis
SVM算法 由浅入深的尝试(一)

SVM算法 由浅入深的尝试(一)

作者: 在做算法的巨巨 | 来源:发表于2018-06-22 21:48 被阅读2次

    FOREWORDS

    SVM,全称Support Vector Machine,也就是支持向量机。
    SVM可以说是目前最受欢迎的机器学习模型,对于线性分类/非线性分类都有非常强大的适应能力。

    本文是进阶文,为了不浪费大家的时间,读之前请问自己以下几个问题:
    "What is data classification? "
    "Why do we use it?" --- stupid question, aha?
    "What is perceptron?" --- not details needed, just conception.(very important!)

    IF 以上的问题,你还无法给自己一个答案:
            All right,请继续努力,对于机器学习/数据挖掘来说,所有人都需要一个过程,时间会给你答案。对于我的菜鸟经历来说,感知机是机器学习分类算法的最初实现,而SVM是让分类变得更加可信。如果接下来时间允许,我会另写一篇有关感知机的博文。
    ELSE :
            Good,听听我对SVM的理解和我所做的尝试。

    生活中我们需要一些勇气去追寻自己的理想。

    Some Fundamental Ideas

    • 间隔最大化(核心)
    • 核函数的引用 (将线性分类的应用拓展到非线性问题,最牛A的地方)

    %下面我会用python对线性可分情况进行解释以上概念,同时引入一些新的概念。

    import numpy as np
    import seaborn as sns
    import matplotlib.pylab as plt
    from sklearn import datasets
    iris = datasets.load_iris()
    plt.plot(iris['data'][iris['target']==0,2],iris['data'][iris['target']==0,3],'o')
    plt.plot(iris['data'][iris['target']==1,2],iris['data'][iris['target']==1,3],'o')
    plt.xlabel(iris['feature_names'][2])
    plt.ylabel(iris['feature_names'][3])
    plt.legend([iris['target_names'][0],iris['target_names'][1]])
    

    我们得到的图像如下:


    Hyperplane.png

    note: 箭头是我后期标注的,绿色箭头是分隔超平面比较极端的情况,黄色和红色分别代表分隔超平面可移动的方向。
    分隔超平面的函数表示:[图片上传失败...(image-9ba451-1529905115287)]
    间隔包括,函数间隔和几何间隔。
    函数间隔,functional margin, 描述样本点到超平面的远近,[图片上传失败...(image-b8277c-1529905115287)])
    几何间隔,geometric margin,表示样本点到超平面的空间距离, [图片上传失败...(image-feaf29-1529905115287)]}{||W||})

    我们定义 几何间隔
    [图片上传失败...(image-3660f4-1529905115287)]
    执行SVM的目标:间隔最大化
    note:超平面的数量是无限的,每一个超平面我们都选合理的几何间隔,然后在所有的几何间隔中,我们选取最大的几何间隔,从而确定满足间隔最大化,也就是说它存在唯一解。这是一个最优化问题。

    最大间隔分离超平面,[图片上传失败...(image-2d362c-1529905115287)]
    [图片上传失败...(image-864403-1529905115287)]-1\geq0,,i=1,2,...,N)

    我们的目标就是要求解上述的max值。
    从几何间隔和函数间隔的定义可以看出,分割面的向量w对gamma的值影响是最直接的。
    比如:我将w和b扩大N倍,变为Nw和Nb,那么函数间隔同样变为N倍,也因此说明左右上述最优化问题最直接的变量就是分母的|W|。既然分子对最优化的影响远小于分母,那么,我们姑且令分子为1。
    也因此,上述的max问题变为:
    [图片上传失败...(image-cf75fc-1529905115287)]
    [图片上传失败...(image-98a3c2-1529905115287)]-1\geq0,,i=1,2,...,N)

    我们发现可以用等价原理将上述的形式转化
    [图片上传失败...(image-591a28-1529905115287)]

    于是我们得到了新的约束最优化问题。
    [图片上传失败...(image-22179c-1529905115287)]
    [图片上传失败...(image-fdabf-1529905115287)]-1\geq0,,i=1,2,...,N)
    这是一个凸二次规划的问题。

    在解决这个问题之前,还需要引入一个核心keyword--------支持向量
    这也就是为什么取该算法叫做支持向量机的原因。
    所谓的支持向量,就是训练数据集的样本点与分隔超平面距离最近的样本点,我们叫做支持向量。
    %我用python做一个图展示下

    import seaborn as sns
    sns.set_style('darkgrid')
    x=iris['data'][:,(2,3)]
    y=(iris['target']==0).astype(np.float64)
    clf=svm.SVC(kernel='linear')
    clf.fit(x,y)
    w=clf.coef_[0]
    xx=np.linspace(1.5,3.5)
    b=clf.intercept_[0]
    yy=(-b-w[0]*xx)/w[1]
    yy1=(-w[0]*xx-(-w[0]*clf.support_vectors_[0,0]-w[1]*clf.support_vectors_[0,1]))/w[1]
    yy2=(-w[0]*xx-(-w[0]*clf.support_vectors_[1,0]-w[1]*clf.support_vectors_[1,1]))/w[1]
    plt.scatter(clf.support_vectors_[:,0],clf.support_vectors_[:,1],marker='o',c='',edgecolors='g')
    plt.scatter(clf.support_vectors_[:,0],clf.support_vectors_[:,1],edgecolors='g',s=105)
    plt.plot(iris['data'][iris['target']==0,2],iris['data'][iris['target']==0,3],'o')
    plt.plot(iris['data'][iris['target']==1,2],iris['data'][iris['target']==1,3],'o')
    plt.xlabel(iris['feature_names'][2])
    plt.ylabel(iris['feature_names'][3])
    plt.legend([iris['target_names'][0],iris['target_names'][1]])
    plt.plot(iris['data'][iris['target']==2,2],iris['data'][iris['target']==2,3],'o')
    plt.plot(xx,yy)
    plt.plot(xx,yy1,'-.')
    plt.plot(xx,yy2,'-.')
    
    plot.png

    现在回顾之前说到的,我们的函数间隔取的是所有样本点最小的,我们的几何间隔取的是最小间隔集合里最大的,也就是说最终得到的值对应的支持向量将直接决定分离超平面,其他的样本点并不起作用,就是说去掉其他样本点,我们依然会得到一样的超平面,支持向量决定最大间隔超平面,这种重要性决定了为什么我们对该算法起名SVM。

    AFTERWORDS

    接下来的内容就是要求解条件约束最优化问题,我们用到了对偶算法,所以下一篇会重点描述对偶算法,以及如何确定支持向量和W。以及后面会涉及到软间隔问题,核函数的使用,以及SMO算法。

    路还长,不要被眼前的困境迷失了双眼。just keep doing~

    相关文章

      网友评论

        本文标题:SVM算法 由浅入深的尝试(一)

        本文链接:https://www.haomeiwen.com/subject/qiwhyftx.html