前面两篇博客对线性支持向量机进行了详细的讲解,但线性SVM对于非线性的数据是无可奈何的。这篇博客将讲一下非线性支持向量机。
1. 核方法
对SVM有过一定耳闻的人,一定听说过“核技巧”、“核方法”这些名词,其实核方法并不是只能应用于SVM,还可以应用于其他地方。现在就来讲讲核方法是如何处理非线性数据的。
假设给定如下数据(上面左图),显然我们没法用一条直线将
′∘′
′
∘
′
和
′×′
′
×
′
分开,如果用一个椭圆,将会得到很好的效果。我们希望将这个非线性分类问题变换为线性问题,通过变换后的线性问题的方法求解原来的非线性问题。上图中,我们可以将左图的椭圆变换成右图中的直线,将非线性分类问题变换为线性分类问题。
假设原空间为
X∈R2,x=(x(1),x(2))∈X
X
∈
R
2
,
x
=
(
x
(
1
)
,
x
(
2
)
)
∈
X
,新空间为
Z∈R2,z=(z(1),z(2))∈Z
Z
∈
R
2
,
z
=
(
z
(
1
)
,
z
(
2
)
)
∈
Z
,定义从原空间到新空间的变换为:
总结一下,用线性分类方法求解非线性分类问题分为两步:首先使用一个变换将原空间的数据映射到新空间; 然后再新空间里用线性分类学习方法从训练数据中学习分类模型。
核技巧就属于这样的方法,应用到SVM上面的基本想法就是通过一个非线性变换 ϕ(x) ϕ ( x ) 将输入空间(欧式空间或离散集合)对应于一个特征空间(希尔伯特空间),使得输入空间的超曲面模型对应于特征空间中的超平面模型。幸运的是, 如果原始空间是有限维,即属性数有限,那么一定存在一个高维特征空间使样本线性可分。于是在特征空间中分离超平面所对应的模型可表示为:
2. 核函数
显然,如果映射
ϕ(x)
ϕ
(
x
)
的具体形式已知,我们可以很轻松写出核函数
K(x,z)
K
(
x
,
z
)
。但现实任务中我们通常不知道
ϕ(x)
ϕ
(
x
)
是什么形式,那么合适的核函数是否一定存在呢?什么样的函数才能做核函数呢?
先上结论,一个函数能作为核函数的充要条件是——正定核函数。即核函数
K(x,z)
K
(
x
,
z
)
对应的Gram矩阵
线性核函数
多项式核函数
高斯核函数
Sigmoid核函数
3. 核函数的选取
一般情况下用的是线性核和高斯核,注意要对数据进行归一化处理。一般情况下高斯核的效果不会差于线性核,只不过高斯核计算量比线性核大。吴恩达课程里总结了这么几点:
(1) 当输入特征维度很大,和样本数量差不多时,这时选用线性核。因为特别高维度的空间,往往是线性可分的(核函数的动机不就是将低维特征映射到高维特征吗,既然已经维度很高,那么很有可能是线性可分的)。
(2) 当输入特征维度比较小,样本数量一般,选择高斯核较好。
(3) 当输入特征维度比较小,样本数量很多,则需要手工添加一些特征变成第一种情况。
线性核其实就是高斯核的一个特例,所以使用了高斯核的情况下就没必要考虑线性核了;在某些参数下,RBF和Sigmoid具有相似的性能;相比多项式核函数,RBF的参数较少,更容易选择。基于这些原因,高斯核是应用最广的核函数。
4. 小结
对非线性SVM算法流程做一个小结:
输入:线性可分数据集
T={(x(1),y(1)),(x(2),y(2)),…,(x(m),y(m))}
T
=
{
(
x
(
1
)
,
y
(
1
)
)
,
(
x
(
2
)
,
y
(
2
)
)
,
…
,
(
x
(
m
)
,
y
(
m
)
)
}
,
y(i)∈{−1,+1}
y
(
i
)
∈
{
−
1
,
+
1
}
输出:分离超平面和分类决策函数
(1)选取适当的核函数
K(x,z)
K
(
x
,
z
)
和惩罚系数
C
C
构造约束最优化问题:
(3)计算得到 w∗ w ∗ 和 b∗ b ∗ :
SVM的最后一篇博客将讲一下之前遗漏的SMO算法。