其他机器学习系列文章见于专题:机器学习进阶之路——学习笔记整理,欢迎大家关注。
1. 核化线性降维
线性降维方法假设从高维空间到低维空间的函数映射是线性的,然而在有些时候,高维空间是线性不可分的,需要找到一个非线性函数映射才能进行恰当的降维,这就是非线性降维。

核化线性降维方法是一种典型的非线性降维方法,它基于核技巧对线性降维方法进行“核化”,然后再降维。
下面我们将要介绍的核主成分分析(KPCA)就是一种经典的核化线性降维方法。
2. KPCA概述
核主成分分析(Kernelized PCA,KPCA)利用核技巧将 d d d维线性不可分的输入空间映射到线性可分的高维特征空间中,然后对特征空间进行PCA降维,将维度降到 d ′ d' d′维,并利用核技巧简化计算。也就是一个先升维后降维的过程,这里的维度满足 d ′ < d < D d'<d<D d′<d<D。
3. KPCA原理
原始输入空间中的样本 X = ( x 1 , x 2 , … , x m ) X = \left( {{x_1},{{x}_2}, \ldots ,{{x}_m}} \right) X=(x1,x2,…,xm)通过映射 ϕ \phi ϕ得到高维( D D D维)特征空间的样本 Φ ( X ) = ( ϕ ( x 1 ) , … , ϕ ( x i ) , … , ϕ ( x m ) ) \Phi ( X ) = \left( \phi \left( x _ { 1 } \right) , \ldots , \phi \left( x _ { i } \right) , \ldots , \phi \left( x _ { m } \right) \right) Φ(X)=(ϕ(x1),…,ϕ(xi),…,ϕ(xm))(假设高维空间的数据样本已经进行了中心化),之后利用投影矩阵 W = ( w 1 , … , w j , … , w d ′ ) W = \left( {{w_1}, \ldots ,{w_j}, \ldots ,{w_{d'}}} \right) W=(w1,…,wj,…,wd′)把高维空间的样本投影到低维空间。
我们只需要对高维空间的协方差矩阵 Φ ( X ) Φ ( X ) T \Phi ( X ) \Phi ( X ) ^ { T } Φ(X)Φ(X)T进行特征值分解,将求得的特征值排序,取前 d ′ d' d′个特征值对应的特征向量构成 W = ( w 1 , w 2 , … , w d ′ ) W = \left( w _ { 1 } , w _ { 2 } , \dots , w _ { d ^ { \prime } } \right) W=(w1,w2,…,wd′),这就是KPCA的解。
首先求解式(1):
Φ
(
X
)
Φ
(
X
)
T
W
=
λ
W
(1)
\Phi \left( X \right)\Phi {\left( X \right)^T}W = \lambda W\tag{1}
Φ(X)Φ(X)TW=λW(1)
由式(1)可得式(2):
W
=
1
λ
Φ
(
X
)
Φ
(
X
)
T
W
=
Φ
(
X
)
A
(2)
W = \frac{1}{\lambda }\Phi \left( X \right)\Phi {\left( X \right)^T}W = \Phi \left( X \right)A \tag{2}
W=λ1Φ(X)Φ(X)TW=Φ(X)A(2)
其中,投影矩阵的第 j j j维为 w j = 1 λ j ( ∑ i = 1 m ϕ ( x i ) ϕ ( x i ) T ) w j = ∑ i = 1 m ϕ ( x i ) ϕ ( x i ) T w j λ j = ∑ i = 1 m ϕ ( x i ) α i j w _ { j } = \frac { 1 } { \lambda _ { j } } \left( \sum _ { i = 1 } ^ { m } \phi \left( x _ { i } \right) \phi \left( x _ { i } \right) ^ { T } \right) w _ { j } = \sum _ { i = 1 } ^ { m } \phi \left( x _ { i } \right) \frac { \phi \left( x _ { i } \right) ^ { T } w _ { j } } { \lambda _ { j } } = \sum _ { i = 1 } ^ { m } \phi \left( x _ { i } \right) \alpha _ { i } ^ { j } wj=λj1(∑i=1mϕ(xi)ϕ(xi)T)wj=∑i=1mϕ(xi)λjϕ(xi)Twj=∑i=1mϕ(xi)αij;而 α i j = 1 λ j ϕ ( x i ) T w j \alpha _i^j = \frac{1}{{{\lambda _j}}}\phi {\left( {{x_i}} \right)^T}{w_j} αij=λj1ϕ(xi)Twj是 α i {\alpha _i} αi的第 j j j个分量,矩阵 A = ( α 1 , … , α i , … , α m ) {\bf{A}} = \left( {{\alpha _1}, \ldots ,{\alpha _i}, \ldots ,{\alpha _m}} \right) A=(α1,…,αi,…,αm)。
高维空间的样本内积计算量非常大,在这里,利用核技巧避免对特征空间上的样本内积直接进行计算,于是我们需要引入核函数: κ ( x i , x j ) = ϕ ( x i ) T ϕ ( x j ) \kappa \left( \boldsymbol { x } _ { i } , \boldsymbol { x } _ { j } \right) = \phi \left( \boldsymbol { x } _ { i } \right) ^ { \mathrm { T } } \phi \left( \boldsymbol { x } _ { j } \right) κ(xi,xj)=ϕ(xi)Tϕ(xj)和核矩阵 K \mathbf { K } K,其中 ( K ) i j = κ ( x i , x j ) ( \mathbf { K } ) _ { i j } = \kappa \left( \boldsymbol { x } _ { i } , \boldsymbol { x } _ { j } \right) (K)ij=κ(xi,xj)。
先将式(2)代入式(1)得到:
Φ
(
X
)
Φ
(
X
)
T
Φ
(
X
)
A
=
λ
Φ
(
X
)
A
(3)
\Phi ( X ) \Phi ( X ) ^ { T } \Phi ( X ) A = \lambda \Phi ( X ) A\tag{3}
Φ(X)Φ(X)TΦ(X)A=λΦ(X)A(3)
两边左乘
Φ
(
X
)
T
\Phi ( X ) ^ { T }
Φ(X)T:
Φ
(
X
)
T
Φ
(
X
)
Φ
(
X
)
T
Φ
(
X
)
A
=
λ
Φ
(
X
)
T
Φ
(
X
)
A
(4)
\Phi ( X ) ^ { T } \Phi ( X ) \Phi ( X ) ^ { T } \Phi ( X ) A = \lambda \Phi ( X ) ^ { T } \Phi ( X ) A\tag{4}
Φ(X)TΦ(X)Φ(X)TΦ(X)A=λΦ(X)TΦ(X)A(4)
构造出
Φ
(
X
)
T
Φ
(
X
)
\Phi ( X ) ^ { T } \Phi ( X )
Φ(X)TΦ(X),进一步用核矩阵
K
\mathbf { K }
K代替:
K
2
A
=
λ
K
A
K
A
=
λ
A
(5)
\mathbf { K } ^ { 2 } \mathbf { A } = \lambda \mathbf { K } \mathbf { A }\\ \mathbf { K A } = \lambda \mathbf { A }\tag{5}
K2A=λKAKA=λA(5)
由此,式(1)中的特征值分解问题就变成了式(5)中的特征值分解问题。将求得的特征值排序: λ 1 ≥ λ 2 ≥ … ≥ λ D \lambda _ { 1 } \geq \lambda _ { 2 } \geq \ldots \geq \lambda _ { D } λ1≥λ2≥…≥λD,取 K \mathbf { K } K最大的 d ′ d' d′个特征值对应的特征向量。注意:这里的特征向量是核矩阵 K \mathbf { K } K的特征向量,而不是投影矩阵 W W W的特征向量,接下来还要代回到(2)式中,得到从高维输入空间到低维空间的投影矩阵 W W W。
对于一个新样本
x
x
x,假设其投影后为
z
z
z,其第
j
(
j
=
1
,
2
,
…
,
d
′
)
j \left( j = 1,2 , \dots , d ^ { \prime } \right)
j(j=1,2,…,d′)维坐标为:
z
j
=
w
j
T
ϕ
(
x
)
=
∑
i
=
1
m
α
i
j
ϕ
(
x
i
)
T
ϕ
(
x
)
=
∑
i
=
1
m
α
i
j
κ
(
x
i
,
x
)
(6)
\begin{aligned} z _ { j } & = \boldsymbol { w } _ { j } ^ { \mathrm { T } } \phi ( \boldsymbol { x } ) = \sum _ { i = 1 } ^ { m } \alpha _ { i } ^ { j } \phi \left( \boldsymbol { x } _ { i } \right) ^ { \mathrm { T } } \phi ( \boldsymbol { x } ) \\ & = \sum _ { i = 1 } ^ { m } \alpha _ { i } ^ { j } \kappa \left( \boldsymbol { x } _ { i } , \boldsymbol { x } \right) \end{aligned}\tag{6}
zj=wjTϕ(x)=i=1∑mαijϕ(xi)Tϕ(x)=i=1∑mαijκ(xi,x)(6)
参考文献:
- 《机器学习》第十章降维与度量学习——周志华
- KPCA原理及部分代码
- 降维算法之KPCA原理推导
- 《Python机器学习》读书笔记(七)特征抽取——kPCA
主成分分析(PCA)和基于核函数的主成分分析(KPCA)入门