支持向量机
支持向量机(Support Vector Machine,SVM)是一种应用范围非常广泛的算法,既可以用于分类,也可以用于回归。
本节将介绍如何将线性支持向量机应用于二元分类问题,以间隔(margin)最大化为基准,得到更好的决策边界。
概述
我们使用线性支持向量机(Linear Support Vector Machine,LSVM)处理二元分类。线性支持向量机是以间隔最大化为基准,来学习得到尽可能地远离数据的决策边界的算法。虽然该算法的决策边界与逻辑回归一样是线性的,但有时线性支持向量机得到的结果更好。
下面对同一数据分别应用线性支持向量机和逻辑回归,并比较其结果(图 2-17)。
▲图 2-17 线性支持向量机和逻辑回归的比较
在图 2-17 中,左图是学习前的数据,右图是从数据中学习后的结果。右图中用黑色直线标记的是线性支持向量机的决策边界,用蓝色虚线标记的是逻辑回归的决策边界。
线性支持向量机也好,逻辑回归也好,都可以正确分类,但线性支持向量机的分类结果更佳。
线性支持向量机的学习方式是:以间隔最大化为基准,让决策边界尽可能地远离数据。
下面来看一下线性支持向量机是如何从数据中学习的。
算法说明
线性支持向量机通过最大化间隔来获得更好的用于分类的决策边界。这里首先说明一下间隔的定义。方便起见,我们以平面上的二元分类问题为例进行说明,并且假设数据可以完全分类。线性支持向量机通过线性的决策边界将平面一分为二,据此进行二元分类。此时,训练数据中最接近决策边界的数据与决策边界之间的距离就称为间隔(图 2-18)。
▲图 2-18 不同的间隔
在图 2-18 中,右图的间隔大于左图的间隔。支持向量机试图通过增大决策边界和训练数据之间的间隔来获得更合理的边界。
示例代码
下面生成线性可分的数据,将其分割成训练数据和验证数据,使用训练数据训练线性支持向量机,使用验证数据评估正确率。另外,由于使用了随机数,所以每次运行的结果可能有所不同。
▼示例代码
from sklearn.svm import LinearSVC
from sklearn.datasets import make_blobs
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 1 得到一个包含 50 个样本的二分类数据集,其中一些样本被聚类到 (-1, -0.125) 附近,而另一些样本则被聚类到 (0.5, 0.5) 附近。
# 定义了一个包含两个聚类中心的列表。这两个中心的坐标分别为 (-1, -0.125) 和 (0.5, 0.5)。
centers = [(-1, -0.125), (0.5, 0.5)]
# 使用 make_blobs 函数来创建一个二分类数据集。这个函数会根据给定的参数创建一个包含 50 个样本的数据集,每个样本有 2 个特征。数据集的聚类中心为 centers 中定义的两个点,聚类标准差为 0.3。
X, y = make_blobs(n_samples=50, n_features=2, centers=centers, cluster_std=0.3)
# 2 使用训练集对线性支持向量机模型进行训练,然后使用测试集对模型进行评估,计算准确率。
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
model = LinearSVC()
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
accuracy_score(y_pred, y_test)
结果:
1.0
详细说明
软间隔和支持向量
到这里为止,我们了解的都是数据可以线性分离的情况,这种不允许数据进入间隔内侧的情况称为硬间隔。但一般来说,数据并不是完全可以线性分离的,所以要允许一部分数据进入间隔内侧,这种情况叫作软间隔。通过引入软间隔,无法线性分离的数据也可以如图 2-19 所示进行学习。
▲图 2-19 软间隔
基于线性支持向量机的学习结果,我们可以将训练数据分为以下 3 种。
与决策边界之间的距离比间隔还要远的数据:间隔外侧的数据。
与决策边界之间的距离和间隔相同的数据:间隔上的数据。
与决策边界之间的距离比间隔近,或者误分类的数据:间隔内侧的数据。
其中,我们将间隔上的数据和间隔内侧的数据特殊对待,称为支持向量。支持向量是确定决策边界的重要数据。间隔外侧的数据则不会影响决策边界的形状。
由于间隔内侧的数据包含被误分类的数据,所以乍看起来通过调整间隔,使间隔内侧不存在数据的做法更好。
但对于线性可分的数据,如果强制训练数据不进入间隔内侧,可能会导致学习结果对数据过拟合。
使用由两个标签组成的训练数据训练线性支持向量机而得到的结果如图 2-20 所示。
▲图 2-20 硬间隔和软间隔
图 2-20 的左图是不允许数据进入间隔内侧的硬间隔的情况,右图是允许数据进入间隔内侧的软间隔的情况。
另外,我们在蓝色点表示的训练数据中特意加上了偏离值。
比较两个结果可以发现,使用了硬间隔的图 2-20 中的左图上的决策边界受偏离值的影响很大;而在引入软间隔的图 2-20 中的右图上的学习结果不容易受到偏离值的影响。
在使用软间隔时,允许间隔内侧进入多少数据由超参数决定。与其他算法一样,在决定超参数时,需要使用网格搜索(grid search)和随机搜索(random search)等方法反复验证后再做决定。
———————————————————————————————————————————
文章来源:书籍《图解机器学习算法》
作者:秋庭伸也 杉山阿圣 寺田学
出版社:人民邮电出版社
ISBN:9787115563569
本篇文章仅用于学习和研究目的,不会用于任何商业用途。引用书籍《图解机器学习算法》的内容旨在分享知识和启发思考,尊重原著作者宫崎修一和石田保辉的知识产权。如有侵权或者版权纠纷,请及时联系作者。
———————————————————————————————————————————