支持向量机(Support Vector Machine,SVM)可以用于分类和回归
概述
本节使用线性支持向量机(Linear Support Vector Machine,LSVM)处理二元分类
线性支持向量机是以间隔最大化为标准,来学习得到尽可能远离数据的决策边界的算法
该算法决策边界与逻辑回归一样是线性的,但有时线性支持向量机效果更好
线性支持向量机的学习方式是:以间隔最大化为标准,让决策边界尽可能地远离数据
算法说明
线性支持向量机通过最大化间隔来获得更好的用于分类的决策边界
间隔:(以平面上二元分类为例,假设数据可以完全分类)线性支持向量机通过线性的决策边界将平面一分为二,据此进行二元分类。此时,训练数据中最接近决策边界的数据与决策边界之间的距离即为间隔
支持向量机试图通过增大决策边界和训练数据之间的间隔来获得更合理的边界
示例代码
代码生成线性可分的数据,将其分割成训练数据和验证数据,使用训练数据训练线性支持向量机,使用验证数据评估正确率
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
# 生成数据
centers = [(-1, -0.125), (0.5, 0.5)]
X, y = make_blobs(n_samples = 50,n_features = 2,centers = centers,cluster_std = 0.3)
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) # 评估
详细说明
不允许数据进入间隔内侧的情况为硬间隔(例如可以线性分离的数据)
但一般情况下,数据并不是完全可以线性分离的,所以要允许一部分数据进入间隔内侧,即为软间隔
基于线性支持向量机的学习结果,训练数据可分为3种:
- 间隔外侧数据:与决策边界之间的距离比间隔还要远
- 间隔上数据:与决策边界之间的距离和间隔相同
- 间隔内侧数据:与决策边界之间的距离比间隔还要近,或者误分类数据
支持向量:间隔上数据和间隔内侧数据
支持向量为确定决策边界重要数据
对于线性可分的数据,如果强制数据不进入间隔内侧,可能会导致学习结果对数据过拟合
使用软间隔时,允许间隔内侧进入多少数据由超参数决定(超参数的决定,需要使用网格搜索(grid search)和随机搜索(random search)等方法反复验证)