前言
之前在学习SVM的时候,看到一个比较有意思的特性,特此记录一下;
一个例子
x
=
(
x
1
,
x
2
)
,
z
=
(
z
1
,
z
2
)
x = ( x_{1},x_{2} ), z = ( z_{1},z_{2} )
x=(x1,x2),z=(z1,z2),X和Z都是低维度空间里的两个向量,下面做一些比较简单的运算:
x
T
z
=
(
x
1
z
1
+
x
2
z
2
)
x^{T}z=(x_{1}z_{1}+x_{2}z_{2})
xTz=(x1z1+x2z2)
ϕ
(
x
)
=
(
x
1
2
,
x
2
2
,
2
x
1
x
2
)
\phi(x)=(x_{1}^{2},x_{2}^{2},\sqrt{2}x_{1}x_{2})
ϕ(x)=(x12,x22,2x1x2),
ϕ
(
z
)
=
(
z
1
2
,
z
2
2
,
2
z
1
z
2
)
\phi(z)=(z_{1}^{2},z_{2}^{2},\sqrt{2}z_{1}z_{2})
ϕ(z)=(z12,z22,2z1z2)
ϕ
(
x
)
T
ϕ
(
z
)
=
(
x
1
2
z
1
2
,
x
2
2
z
2
2
,
2
x
1
x
2
z
1
z
2
)
=
(
x
1
z
1
+
x
2
z
2
)
2
=
(
x
T
z
)
2
\phi(x)^{T}\phi(z)=(x_{1}^{2}z_{1}^{2},x_{2}^{2}z_{2}^{2},2x_{1}x_{2}z_{1}z_{2})=(x_{1}z_{1}+x_{2}z_{2})^{2}=(x^{T}z)^{2}
ϕ(x)Tϕ(z)=(x12z12,x22z22,2x1x2z1z2)=(x1z1+x2z2)2=(xTz)2
这个过程由低维映射到了高维,同时我们发现在高维空间计算内积的时候并不依赖于高维空间,而是仅仅依赖于原来低维空间的内积 ( x T z ) (x^{T}z) (xTz) ;
下面这个式子是SVM里面推导出的dual formation(对偶式):
L
=
−
1
2
∑
i
=
1
n
∑
j
=
1
n
λ
i
λ
j
y
i
y
j
x
i
T
x
j
+
∑
i
=
1
n
λ
i
L=-\frac{1}{2}\sum_{i=1}^{n}\sum_{j=1}^{n}{\lambda_{i}\lambda_{j}y_{i}y_{j}x_{i}^{T}x_{j}} + \sum_{i = 1}^{n}{\lambda_{i}}
L=−21∑i=1n∑j=1nλiλjyiyjxiTxj+∑i=1nλi
我们发现里面有
x
T
z
x^{T}z
xTz的形式;上面这个式子里面,对于样本来说,我们所需要计算的就是
x
i
T
x
j
x_i^Tx_j
xiTxj这项;我们在计算的时候如果把它映射到高维空间里面,就变成了
ϕ
(
x
i
)
T
ϕ
(
x
j
)
\phi(x_i)^{T}\phi(x_j)
ϕ(xi)Tϕ(xj) ;此时原来空间里的内积就变成了现在的新的空间里的内积;如果能找到一个合适的函数
ϕ
(
?
)
\phi(?)
ϕ(?)使得原来空间里面的复杂度和新的空间里面的时间复杂度一样或者比原来复杂度低,这就叫kernel trick;
kernel trick不仅仅只用于SVM里面,只要目标函数里面有类似于
x
T
z
x^{T}z
xTz这样的项,并且依赖于这样的项,就可以使用kernel trick;
常见的核函数有线性核函数,多项式核函数以及高斯核函数(具体可以自行bing等工具搜索).