赞
踩
【线性可分数据】的支持向量机的原理在这里,上一篇博客也详细介绍了支持向量机的每一步算法原理,这一篇博客主要介绍针对【线性不可分数据】的处理方法,主要是软间隔与核函数的处理方法。
–-----------------------------------------------------------------------------—------------------------–
–-----------------------------------------------------------------------------—------------------------–
线性不可分的数据大致有两种情况导致的:
–-----------------------------------------------------------------------------—------------------------–
–-----------------------------------------------------------------------------—------------------------–
软间隔的适用范围是样本的本质是线性可分的,但由于部分噪声的影响,导致数据线性不可分。
如下图,在允许部分样本犯错的情况下,图2分割方式的鲁棒性要比图1更好,所以我们需要引入一个新变量
ξ
ξ
ξ:用来衡量每个错误点的
“
犯
错
的
程
度
”
“犯错的程度”
“犯错的程度”;
结合下图也就是说:
在上一篇博客【3.4、SVM的优化策略】处,我们依据SVM的原理得到的数学表达式如下左式:
其中约束条件
y
(
i
)
(
w
T
x
(
i
)
+
b
)
≥
D
y^{(i)}(w^Tx^{(i)}+b)≥D
y(i)(wTx(i)+b)≥D,是说明任何一个点到分割线的距离都会不小于一个确切的值
D
D
D(经过线性变换后,
D
D
D最后会化成1)。而如果在允许部分样本犯错的情况下引入误差
ξ
ξ
ξ,对每个样本点的约束条件会变成:
y
(
i
)
(
w
T
x
(
i
)
+
b
)
≥
1
−
ξ
i
y^{(i)}(w^Tx^{(i)}+b)≥1-ξ_i
y(i)(wTx(i)+b)≥1−ξi,随之而来的:错误点引入的误差在原有的全局损失中也要有所体现,于是就需要在原有全局损失中加上错误点带来的多余损失
ξ
i
ξ_i
ξi,
考虑到每个点的误差
ξ
ξ
ξ,采用软间隔的数学公式就如下左式,再将
ξ
i
ξ_i
ξi换成数学表达式即为下右式:
–-----------------------------------------------------------------------------—------------------------–
–-----------------------------------------------------------------------------—------------------------–
例如上图:数据集用一条直线
f
(
x
)
f(x)
f(x)是不能将两类分开,但是如果用圆的方程
f
(
x
,
y
)
=
x
2
+
y
2
f(x,y)=x^2+y^2
f(x,y)=x2+y2就可以,也就是说当数据从低维映射到高维的时候,可能在数据发布上会发生变化。具体如下:
例如我们有一组二维数据
x
=
(
x
1
,
x
2
)
x=(x_1,x_2)
x=(x1,x2),通过维度变换,由原来的
x
=
(
x
1
,
x
2
)
x=(x_1,x_2)
x=(x1,x2)转化为
x
=
(
x
1
2
,
x
2
2
,
2
x
1
x
2
)
x=(x_1^2,x_2^2,\sqrt2x_1x_2)
x=(x12,x22,2
x1x2),也就是把原有的二维空间点,通过添加正则项重新映射到三维空间中。
例如上图:
x
=
(
0
,
0
)
x=(0,0)
x=(0,0),经过映射后
x
=
(
0
,
0
,
0
)
x=(0,0,0)
x=(0,0,0);
x
=
(
1
,
−
1
)
x=(1,-1)
x=(1,−1),经过映射后
x
=
(
1
,
1
,
−
2
)
x=(1,1,-\sqrt2)
x=(1,1,−2
);
经过重新映射后,上左图的二维数据就转换为上右图的三维分布,可以发现,处于二维图中心位置的红色区域经过映射后大多都在三维图的左边部分,而外围的蓝色区域,发布在三维图的右侧,这时就可以用一个超平面分割达到分类的目的。
原来在二维空间中一个线性不可分的问题,映射到高维空间后, 变成了线性可分的。而转化的关键部分就在于找到 x x x的映射方法,如果没有系统的映射方法,或在数据维度较大时,计算就变得很困难。
例如下式:
x
=
(
x
1
,
x
2
)
x=(x_1,x_2)
x=(x1,x2)如果不做维度变换,则求取
x
T
z
x^Tz
xTz总共做了两次乘法一次加法运算;
当做了维度变换,
x
x
x变成
Φ
(
x
)
Φ(x)
Φ(x)后再求取
Φ
(
x
)
T
Φ
(
z
)
Φ(x)^TΦ(z)
Φ(x)TΦ(z)的时候,则总共做了11次乘法运算2次加法运算
如果在数据维度更大的情况下,需要多加的运算就会呈爆炸增长趋势。
那有没有既能把数据映射到高维、又减小计算量的方法呢?这里就需要核函数。
对比上面的例子,如果我们先计算
x
T
z
x^Tz
xTz,得到的结果是相同,而整体只做了3次乘法运算1次加法运算,相比较上面的11+2次运算已经减少很多;
所以如果
k
(
x
,
z
)
k(x,z)
k(x,z)是核函数,那么它需要满足的条件就是:
k
(
x
,
z
)
k(x,z)
k(x,z)=
Φ
(
x
T
z
)
Φ(x^Tz)
Φ(xTz)=
<
Φ
(
x
T
)
⋅
Φ
(
x
)
>
<Φ(x^T)·Φ(x)>
<Φ(xT)⋅Φ(x)>,通俗的解释就是:先计算中间结果再映射等于各自映射的内积。
于是新的分类函数、优化问题的表达式就变成如下:计算与上节课相似,不在赘述。
对于核函数的选择,现在还缺乏指导原则。各种实验的观察结果表明,某些问题用某些核函数效果很好,用另一些很差,但一般来讲,高斯径向基核函数是不会出现太大偏差的一种,一般作为首选。
1、高斯核函数将有限维映射到无限维
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。