支持向量机 SVM
支持向量机介绍
-
SVM全称是Supported Vector Machine(支持向量机)
- 即寻找到一个超平面使样本分成两类,并且间隔最大。
- 是一种监督学习算法,主要用于分类,也可用于回归
- 与逻辑回归和决策树等其他分类器相比,SVM 提供了非常高的准确度
-
优点:
- 适合小样本 高纬度数据 比较强泛化能力
- 可有效的处理高纬度数据;可使用不同和核函数来适应不同的数据类型
-
缺点:
- 计算复杂度高,对于大规模数据处理肯会存在困难
-
超平面最大间隔
- 硬间隔 Hard Margin
- 如果样本线性可分,在所有样本分类都正确的情况下,寻找最大间隔,这就是硬间隔
- 如果出现异常值或样本不能线性可分,此时硬间隔无法实现
-
软间隔 Soft Margin 和惩罚系数
- 允许部分样本,在最大间隔之内,甚至在错误的一边,寻找最大间隔,这就是软间隔
- 目标是尽可能在保持间隔宽度和限制间违例之间找到良好的平衡
- 通过惩罚系数C来控制职工平衡:C值越小,则间隔越宽,短时间隔违例也会越多
-
核函数 Kernel
- 核函数将原始输入空间映射到新的特征空间,使得原本线性不可分的样本在核空间可分
支持向量机API的使用
sklearn.svm.LinearSVC(C = 1.0)
- C: 惩罚系数, 类似于线性回归的正则化系数
- LinearSVC API 的使用方式:
from sklearn.svm import LinearSVC
mysvc = LinearSVC(C = 30)
mysvc.fit(X_standard,y)
print(mysvc.score(X_standard, y))
代码实现
import numpy as np # numpy
import matplotlib.pyplot as plt # 数据可视化
from sklearn import datasets # 数据集
from sklearn.datasets import load_iris
from sklearn.metrics import accuracy_score
from sklearn.preprocessing import StandardScaler # 数据预处理
from sklearn.svm import LinearSVC # 线性SVM
from plot_util import plot_decision_boundary
def demo01():
'''
鸢尾花分类
:return:
'''
# 2.加载数据及数据预处理
# 2.1 加载数据
X, y = load_iris(return_X_y=True)
print(y.shape)
print(X.shape)
# 2.2 数据降维
x = X[y < 2, :2]
y = y[y < 2]
print(y.shape)
plt.scatter(x[y == 0, 0], x[y == 0, 1], c='red')
plt.scatter(x[y == 1, 0], x[y == 1, 1], c='blue')
plt.show()
# 2.3 数据预处理,标准化
transform = StandardScaler