购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.5 核SVM解决非线性分类问题

支持向量机(SVM)算法除了能对线性问题进行分类外,还可以对非线性可分的问题进行分类,可以很容易地使用“核技巧”来解决非线性可分问题。

3.5.1 处理非线性不可分数据的核方法

在非线性问题中,最经典的非线性问题莫过于对于异或问题的分类,下面通过一个例子来演示。

【例3-3】 通过Python生成一个异或数据集。

    import matplotlib.pyplot as plt
    import numpy as np
          
    np.random.seed(1)
    X_xor = np.random.randn(200,2)
    y_xor = np.logical_xor(X_xor[:,0]>0,
                                 X_xor[:,1]>0)
    y_xor = np.where(y_xor,1,-1)
          
    plt.scatter(X_xor[y_xor == 1,0],
                   X_xor[y_xor == 1,1],
                   c='b',marker='x',
                   label='1')
    plt.scatter(X_xor[y_xor == -1,0],
                   X_xor[y_xor == -1,1],
                   c='r',
                   marker='s',
                   label='-1')
    plt.xlim([-3,3])
    plt.ylim([-3,3])
    plt.legend(loc='best')
    plt.tight_layout()
    plt.show()

运行程序,得到如图3-10所示的随机噪声的异或数据集。

图3-10 异或数据集

从图3-10可看出,不能用前面讨论过的线性逻辑回归或线性SVM模型所产生的线性超平面作为决策边界来分隔样本的正类和负类。然而,核方法的逻辑是针对线性不可分数据,通过映射函数 Φ 把原始特征投影到一个高维空间,特征在该空间变得线性可分,如图3-11所示。

3.5.2 核函数实现高维空间的分离超平面

为了使用SVM解决非线性问题,需要调用映射函数 Φ 将训练数据变成在高维空间上表示的特征,然后训练SVM模型对新特征空间的数据进行分类。可以用相同的映射函数 Φ 对新的、未见过的数据进行变换,用线性SVM模型进行分类。

图3-11 原始特征投影到一个高维空间效果

定义核函数如下:

通过下面代码看能否训练核SVM来画出非线性决策边界,以区分异或数据。

    svm = SVC(kernel='rbf',random_state=1,gamma=0.10,C=10.0)
    svm.fit(X_xor,y_xor)
    plot_decision_regions(X_xor,y_xor,
                              classifier=svm)
    plt.legend(loc='upper left')
    plt.tight_layout()
    plt.show()

运行程序,效果如图3-12所示。

图3-12 划分非线性决策边界效果

γ 值的不同,可能导致决策边界紧缩和波动,此处将 γ 值改为0.5,则决策边界效果如图3-13所示。

图3-13 决策边界效果 OAVlcFX1Z/f/1YSFYRPdHZUUb9e/VRP1tKXpJ1Gy/W82Hy/Mq482hKgYYZsNsow0

点击中间区域
呼出菜单
上一章
目录
下一章
×

打开