本文介绍了支持向量机(SVM)在机器学习领域的重要性,特别是在小样本分类任务中的优势。文章详细阐述了SVM的核心概念如间隔、超平面和支持向量,以及核心步骤。同时,也讨论了非线形可分数据的处理方法和SVM的优缺点。最后,提供了相关参考资料。
SVM依据结构风险最小化原则,平衡模型复杂程度与拟合精准度,防止小样本带来的过拟合问题。它通过关注决定分类结果的关键支持向量,扩大类别间隔,精准提炼小样本的关键特征,在图像识别、生物医疗等领域都发挥了出色作用。
SVM的核心概念包括超平面、间隔和支持向量。超平面是在高维空间中划分数据点的子空间,间隔是超平面到最近数据点的距离,而支持向量是那些位于间隔边界上的数据点,对确定超平面的位置和方向起着关键作用。
SVM的目标是通过找到最优超平面,使得不同类别的数据点到这个超平面的间隔最大化。这个目标函数是通过约束条件下最小化间隔的倒数来抽象的。
在实际问题中,数据可能并非完全线性可分,SVM通过引入松弛变量来处理这种情况。对于非线性数据,可以通过手动增加特征或使用核函数的方法将其映射到高维空间,实现线性可分。
SVM的优点包括对小样本分类任务表现出色、能够处理非线性数据等。但缺点也包括对大规模数据集的处理效率较低、核函数的选择及参数调优较为困难等。
本文作者为 360 奇舞团前端开发工程师
在机器学习领域,数据量对算法性能影响重大。支持向量机(SVM)在小样本分类上表现亮眼,它依据结构风险最小化原则,平衡模型复杂程度与拟合精准度,防止小样本带来的过拟合问题。同时,SVM 重点关注决定分类结果的关键支持向量,以此扩大类别间隔,精准提炼小样本的关键特征,凭借这些优势,在图像识别、生物医疗等诸多领域都发挥了出色作用。
1. 二元分类问题
二元分类问题是一种监督学习中的分类任务,其目标是将样本分为两个类别。例如,判断一封电子邮件是垃圾邮件还是非垃圾邮件;医学诊断中判断一个肿瘤是良性还是恶性等。
对于训练数据,通常用特征向量
来表示一个样本的特征,其中n表示特征的数量。而与之对应的标签y只有两个取值,通常采用y = -1和y = 1的形式来代表两个不同的类别。
针对于用户流失预测问题,假设用
表示一个用户的相关特征,其中:
对应的标签y:未来一段时间内不再购买产品或服务,y=1;反之,y=-1。
对于这种问题,SVM算法可以很好地利用已有数据来训练模型并对无标签的用户进行预测。
2. 核心概念
超平面(Hyperplane)
在高维空间中,超平面是一个能将数据点划分成不同类别的子空间。对于二维空间,超平面是一条直线;对于三维空间,超平面是一个平面;在更高维空间中,它是一个广义的平面。
对于线性可分的二分类问题,超平面可以用方程
来表示,其中
是权重向量,
是特征向量,b是偏移量。
例如,在二维空间中,直线
可以写成
,其中w=(1, -1),b=5。
SVM 的目标是找到一个最优的超平面,使得不同类别的数据点到这个超平面的间隔(Margin)最大。
间隔(Margin)
间隔是指超平面到最近的数据点的距离。对于线性可分的数据,有两个平行于最优超平面的超平面,它们分别经过两个不同类别的最靠近中间超平面的数据点,这两个超平面之间的距离就是间隔。
数学表达式:数据点
到超平面
的距离公式为
其中||w||是权重向量w的范数。以
范数(欧式范数)为例,对于二维向量,其值等于
。
SVM 试图最大化这个间隔,因为更大的间隔意味着更好的泛化能力,即对新数据的分类准确性可能更高。
支持向量(Support Vectors)
支持向量是那些位于间隔边界上的数据点,也就是最靠近超平面的数据点。这些数据点对于确定超平面的位置和方向起着关键作用。
超平面的方程和间隔的计算实际上只与支持向量有关。在训练过程中,SVM 重点关注这些支持向量,其他非支持向量的数据点对模型的最终形式没有直接影响(只要它们不改变支持向量的位置)。例如,当数据量增加,但不改变支持向量时,模型的决策边界(超平面)不会改变。
3. 核心步骤
我们仍然以第一部分,二元分类问题中的用户流失预测问题为例,假设有一些已标记的样本用户数据:
-
-
-
:1表示未来一段时间不会下单,-1表示未来一段时间会下单
sample
|
x1
|
x2
|
y
|
1
|
6
|
0
|
1
|
2
|
9
|
1
|
1
|
3
|
10
|
2
|
1
|
4
|
14
|
2
|
1
|
5
|
7
|
1
|
1
|
6
|
5
|
3
|
-1
|
7
|
8
|
2
|
-1
|
8
|
10
|
3
|
-1
|
9
|
12
|
3
|
-1
|
10
|
7
|
2
|
-1
|
SVM算法就相当于一个裁判,它的任务是在这个图中画一条线(超平面),把这两支队伍给划分开,而且要画得特别巧妙,让两边离这条线最近的队员(数据点)到这条线的距离之和最大,这个距离之和就是所谓的间隔,即间隔最大。
目标函数推导
-
目标:找到一个超平面,将两类数据完全分开,并且使间隔(正类和负类距离超平面最近的点的间隔最大)最大化。
-
间隔方程:$$d = \frac
x_
i} + b
\frac
+ \frac
= \frac
2}{
\frac{1}{2}||w||$$
-
假设开始时随意给定一个超平面,计算数据点到这个超平面的距离。根据这些信息,一些离超平面较近的数据点开始被关注,它们有可能成为支持向量。然后,通过调整超平面,使得这些潜在支持向量更好地满足间隔最大化的条件。
这个过程不断迭代,直到找到最优的超平面,此时对应的离超平面最近的数据点就是支持向量。
import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm
X_lost = np.array([