支持向量机
丹丹

特性

  • 能适应”样本数少,特征维度高”的数据集

步骤

基本原则

  1. 学习数据空间中的一个超平面达到二值分类目的,在普通线性可分问题中,符合分类要求的超平面会有无穷多个
  2. 尽可能找到最能平均分配两类数据中空白区域的超平面,亦即使得”与超平面距离最小的数据点的距离”最大化
    • 平行于最优超平面(Optional Hyperplane),且含括两类数据中最靠近超平面的点(此两数据点即为Support Vector)的超平面距离应越大越好
    • 最优超平面到上述两超平面的距离应相等(此处距离即为间隔Margin)

当数据出现噪声

  1. 当数据出现噪声,Margin过低时会导致模型过拟合,此时应加入”软间隔(Soft Margin)”概念
    • 要尽可能正确地分类训练数据(松弛因子超参数C大)
    • Margin 要尽可能大(松弛因子超参数C小)

当数据在现有维度中找不到最优超平面

  1. 任何有限维度的非线性问题在更高维度的空间里总可以变化成线性可分问题
  2. SVM使用拉格朗日乘子法(Lagrange Multiplier)实现对超平面求解问题的升维,不需真的升维,而是将求超平面参数的目标转换为用高维中数据点向量两两点积值求解的二次规划问题
  3. 核函数(Kernel Function)就是一种输入两个低维空间向量,返回高维空间点积的函数。一些常用的核函数如下:
    • 线性核(Linear):直接返回输入向量的点积,速度最快,因为实际上没有升维,适用于本身特征维度较高、样本数量很大的场景
    • 多项式核(Polynomial):其中超参数d是提升到的维度
    • 高斯迳向基核(Gaussian Radial Basis Function):应用最广泛,gamma值越大越容易过拟合
    • Sigmoid核:

SVM

1
2
3
4
5
6
7
8
9
10
11
from sklearn import svm

x = [[0,0],[2,2]]
y = [1,2]

clf = svm.SVC(kernel = "rbf")
clf.fit(x,y)

t = [[2,1],[0,1]]
print(clf.predict(t))
print(clf.decision_function(t)) # 返回数据到超平面的距离,越大则分类可靠性越高
[2 1]
[ 0.52444566 -0.52444566]

参考:

  1. 从机器学习到深度学习:基于Scikit-learn与TensorFlow的高效开发实战
  2. SVM 原理详解,通俗易懂