SVM核函数
谈一谈自己对核函数的理解
我觉得SVM的核函数能够帮助将低维度的特征向量转换到对应高维度的特征向量,此外转换到对应高维度特征向量后内积便会大大的简化。由于SVM中的运算大多是内积,所以…
举列子
假设定义两个向量:
X
=
(
x
1
,
x
2
)
X=(x_{1},x_{2})
X=(x1,x2)和
Y
=
(
y
1
,
y
2
)
Y=(y_{1},y_{2})
Y=(y1,y2)
由于上述是两个高维度的特征向量,但是我们想要特征向量扩展到更高维度的话,怎么拓展呢?同时又怎么减少计算量呢?
假设我们要把
x
x
x这个特征给变换到更高维度,那么我们应该增加到几维,以及高维度后的向量应该怎么定义呢?
不要怕,我们选择了核函数其实就选了如果扩展到高维度的方法。
假设我们选择了2度的多项式核函数,即
K
(
X
i
,
X
j
)
=
(
<
X
i
,
X
j
>
)
2
K(X_{i},X_{j})=(<X_{i},X_{j}>)^{2}
K(Xi,Xj)=(<Xi,Xj>)2
那么此时表示的是将特征向量X扩展为:
f
(
X
)
=
(
x
1
x
1
,
x
1
x
2
,
x
2
x
1
,
x
2
x
2
)
f
(
Y
)
=
(
y
1
y
1
,
y
1
y
2
,
y
2
y
1
,
y
2
y
2
)
f(X)=(x_{1}x_{1},x_{1}x_{2},x_{2}x_{1},x_{2}x_{2})\\ f(Y)=(y_{1}y_{1},y_{1}y_{2},y_{2}y_{1},y_{2}y_{2})
f(X)=(x1x1,x1x2,x2x1,x2x2)f(Y)=(y1y1,y1y2,y2y1,y2y2)
此时
<
f
(
X
)
,
f
(
Y
)
>
=
x
1
x
1
y
1
y
1
+
x
1
x
2
y
1
y
2
+
x
2
x
1
y
2
y
1
+
x
2
x
2
y
2
y
2
<f(X),f(Y)>=x_{1}x_{1}y_{1}y_{1}+x_{1}x_{2}y_{1}y_{2}+x_{2}x_{1}y_{2}y_{1}+x_{2}x_{2}y_{2}y_{2}
<f(X),f(Y)>=x1x1y1y1+x1x2y1y2+x2x1y2y1+x2x2y2y2
是不是很难,但是利用核函数变为如下:
<
f
(
X
)
,
f
(
Y
)
>
=
K
(
X
,
Y
)
=
(
<
X
,
Y
>
)
2
=
(
x
1
y
1
+
x
2
y
2
+
x
3
y
3
)
2
<f(X),f(Y)>=K(X,Y)=(<X,Y>)^{2}=(x_{1}y_{1}+x_{2}y_{2}+x_{3}y_{3})^{2}
<f(X),f(Y)>=K(X,Y)=(<X,Y>)2=(x1y1+x2y2+x3y3)2
是不是一下子就感觉计算变得简单了,所以核函数的选举要考虑到会影响特征状态维度的扩展。