美文网首页
SVM(1)介绍

SVM(1)介绍

作者: 真橙汁 | 来源:发表于2017-08-16 13:24 被阅读0次

    sklearn的svm使用方法

    from sklearn.svm import SVC
    import numpy as np
    
    # 构造数据
    X= np.array([[-1,-1],[-2,-1],[1,1],[2,1]])
    y = np.array([-1,-1, 1, 1])
    
    # 数据集线性可分,使用最简单的线性核
    svc = SVC(kernel='linear')
    svc.fit(X, y)
    
    testX = [[-5, -7], [-3, -1], [-7, -89], [5, 7], [3, 1], [7, 89]]
    # 输出 testY = [-1, -1, -1, 1, 1, 1]
    print(svc.predict(testX))
    

    以上就是一个简单的svm实例。

    线性分类问题

    对于一个线性分类问题,假设有n个样本向量,就可以找到一个超平面将正反向量分隔开。如图:

    Figure_1.png
    但是图中有三条线可以将其分隔开,都是分类面,实际上,可以找到中间有无数条分类面,但是图中黑色的线分隔效果要比另外两条线要好,因为黑线离两个样本的距离比另外两条线要远(比如绿线更靠近绿色样本,以此为分类面时,更容易将实际上绿色的点划归红色区域)。
    因此线性分类问题实际上需要求出类似于图中黑色的线. 盗用Wikipedia的图:

    其中f(x) = w·x + b, 就是需要求的分类面,图中写的是f(x) = w·x - b,其实都一样。
    对于一个分类面f(x)


    假设所有样本距离此分类面的最小距离为δ,并且正反的分类分别为1和-1,则对于正样本和负样本有如下不等式。


    两端乘以其分类结果y


    所以转换为优化δ,使其最大化。(max(δ)) 但是函数距离并不能代表一个点到一个分类面的真实距离,举例如下: 对于一个二维分类面


    可以表示成以下两种等价形式:


    由于δ可以任意变化,并且确定δ后,w也确定了,为了求解方便,就强制将\deltaδ归一化为1。此时简化成了优化问题:


    上述优化问题与以下优化问题等价:


    然而这组方程并不像表面上那么好解决。。。 需要使用SMO算法迭代出最优解。 最终可以迭代出w和b,即求出了分类面f(x)=w​⋅x+b 而SVM的训练过程即SMO算法迭代求解w和b的过程。

    相关文章

      网友评论

          本文标题:SVM(1)介绍

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