我将从以下这几个方面来全面、通俗地为大家介绍典型相关分析 Canonical Correlation Analysis (以下简称,CCA),及其kernel版本的CCA,简称为KCCA。如果有任何问题,欢迎评论,互相学习讨论!
CCA详解目录
Why CCA emerges?
为什么CCA会出现呢?因为存在问题:假如我们有两组变量, X = [ x 1 , x 2 , . . . , x m ] ∈ R d m × m X=[x_1,x_2,...,x_m]\in\mathbb{R^{d_m\times m}} X=[x1,x2,...,xm]∈Rdm×m(即, X X X有 m m m维特征,每维特征有 d m d_m dm个采样点), Y = [ y 1 , y 2 , . . . , y n ] ∈ R d n × n Y=[y_1,y_2,...,y_n]\in\mathbb{R^{d_n\times n}} Y=[y1,y2,...,yn]∈Rdn×n( Y Y Y有 n n n维特征,每个特征有 d n d_n dn个的采样点),如何计算它们的相关性呢?
一般来说,我们首先想到,计算这两组变量的协方差矩阵, c o v ( X , Y ) cov(X,Y) cov(X,Y),其中矩阵的每一个元素表示了 X X X的第 i ( i = 1 , . . . , m ) i(i=1,...,m) i(i=1,...,m)维特征 x i x_i xi与 Y Y Y的第 j ( j = 1 , . . . , n ) j(j=1,...,n) j(j=1,...,n)维特征 y j y_j yj之间的相关性。但是,这个做法的缺点是,我们只分析了不同组变量间特征与特征的关系,而忽略了变量内部的关系(也就是, X X X或 Y Y Y内部的特征间的关系),同时也忽略了两组变量的整体相关性(也就是,由 m m m维特征构成的 X X X与由 n n n维特征构成的 Y Y Y之间的关系)。
所以CCA就诞生了:CCA考察两个整体之间的关系,将整体表示成为两组变量各自特征的线性组合。也就是,
X
a
Xa
Xa与
Y
b
Yb
Yb之间的关系。其中向量
a
=
[
a
1
,
a
2
,
.
.
.
,
a
m
]
T
a=[a_1, a_2, ..., a_m]^T
a=[a1,a2,...,am]T,
b
=
[
b
1
,
b
2
,
.
.
.
,
b
m
]
T
b=[b_1, b_2, ..., b_m]^T
b=[b1,b2,...,bm]T。
u
=
X
a
=
a
1
x
1
+
a
2
x
2
+
.
.
.
+
a
m
x
m
u=Xa=a_1x_1+a_2x_2+...+a_mx_m
u=Xa=a1x1+a2x2+...+amxm
v
=
Y
b
=
b
1
y
1
+
b
2
y
2
+
.
.
.
+
b
n
y
n
v=Yb=b_1y_1+b_2y_2+...+b_ny_n
v=Yb=b1y1+b2y2+...+bnyn
What is CCA?
CCA是一种将每组变量视为各自特征线性组合形式的整体,通过最大化两个整体的相关系数,从而获得连接系数( a , b a,b a,b)、典型相关变量( u , v u,v u,v)和整体相关系数 ρ \rho ρ的一种方法,可以被视为一种降维技术(假设要把两组变量降成一维则只需要选择最大整体相关系数所对应的典型相关变量来表示各自的整体,同理降成二维则增加次大整体相关系数所对应的典型相关变量,以此类推)。目标函数为:
ρ
=
max
a
,
b
c
o
r
r
(
u
,
v
)
=
max
a
,
b
u
T
v
∥
u
∥
⋅
∥
v
∥
=
max
a
,
b
a
T
X
T
Y
b
a
T
X
T
X
a
⋅
b
T
Y
T
Y
b
=
max
a
,
b
a
T
C
x
y
b
a
T
C
x
x
a
⋅
b
T
C
y
y
b
(1)
\rho =\max_{a,b} corr(u,v)=\max_{a,b}\frac{u^{T} v}{\| u\| \cdot \| v\| } =\max_{a,b}\frac{a^{T} X^{T} Yb}{\sqrt{a^{T} X^{T} Xa} \cdot \sqrt{b^{T} Y^{T} Yb}} =\max_{a,b}\frac{a^{T} C_{\mathbf{xy}} b}{\sqrt{a^{T} C_{\mathbf{xx}} a} \cdot \sqrt{b^{T} C_{\mathbf{yy}} b}} \tag{1}
ρ=a,bmaxcorr(u,v)=a,bmax∥u∥⋅∥v∥uTv=a,bmaxaTXTXa⋅bTYTYbaTXTYb=a,bmaxaTCxxa⋅bTCyybaTCxyb(1)
其中,
C
x
y
C_{\mathbf{xy}}
Cxy代表协方差矩阵或方差矩阵。需要说明的是,
X
X
X和
Y
Y
Y内部的特征假设已经进行了去均值处理,所以相关系数:
ρ
x
,
y
=
(
x
−
x
‾
)
T
(
y
−
y
‾
)
∥
x
−
x
‾
∥
⋅
∥
y
−
y
‾
∥
=
x
T
y
∥
x
∥
⋅
∥
y
∥
\rho _{x,y} =\frac{( x-\overline{x})^{T}( y-\overline{y})}{\| x-\overline{x} \| \cdot \| y-\overline{y} \| } =\frac{x^{T} y}{\| x\| \cdot \| y\| }
ρx,y=∥x−x∥⋅∥y−y∥(x−x)T(y−y)=∥x∥⋅∥y∥xTy,其中
x
ˉ
\bar{x}
xˉ表示
X
X
X整体的特征均值。
How CCA works?
可以参考 [ 1 ] [1] [1]中的 2.CCA表示及求解。需要提出来的是,与线性判别分析(LDA)类似的是,为了最大化相关系数,在求解时,固定分母而最大化分子。所以,CCA的目标函数可转为优化问题:
- Maximize a T X T Y b a^TX^TYb aTXTYb
- Subject to: a T X T X a = 1 a^TX^TXa = 1 aTXTXa=1, b T Y T Y b = 1 b^TY^TYb = 1 bTYTYb=1
CCA Example
可以参考
[
1
]
[1]
[1]中的 3.CCA计算例子,里面说地通俗易懂。
(原来编辑好的文字,一不小心刷新页面未保存,结果都没了…所以让我们把重点放在kernel版本的CCA上吧。)
Why KCCA emerges?
KCCA的出现原因,大家都能想到:就是因为当我们的数据(两组变量)之间关系是非线性的时候,直接用CCA去寻找每组变量的线性组合,效果是不好的。扩展到核空间下,具有generality的性质。(以下内容主要参考 [ 2 ] [2] [2],如有需要,可阅读原文。)
What is KCCA?
KCCA是强大的统计工具,能特征化两组多维变量的非线性关系。它首先将数据映射到一个更高维的特征空间中,
ϕ
:
x
=
(
x
1
,
.
.
.
,
x
n
)
⟼
ϕ
(
x
)
=
(
ϕ
1
(
x
)
,
.
.
.
,
ϕ
N
(
x
)
)
(
n
<
N
)
\phi:\mathbf{x}=(\mathbf{x}_1,...,\mathbf{x}_n) \longmapsto \phi(\mathbf{x})=(\phi_1(\mathbf{x}),...,\phi_N(\mathbf{x}))(n<N)
ϕ:x=(x1,...,xn)⟼ϕ(x)=(ϕ1(x),...,ϕN(x))(n<N)
这里
x
\mathbf{x}
x表示一个具有
n
n
n维的变量集,在经过映射函数
ϕ
\phi
ϕ之后,该变量集由
n
n
n维变成
N
N
N维(更高维)。其实我们可以理解
N
N
N维为无穷维,所以
ϕ
\phi
ϕ函数并不可求。为了方便理解和避免混淆,下文将用上标的形式来表示样本,i.e.,
x
(
1
)
=
(
x
1
(
1
)
,
x
2
(
1
)
,
.
.
.
,
x
n
(
1
)
)
\mathbf{x}^{(1)}=(\mathbf{x}_1^{(1)},\mathbf{x}_2^{(1)},...,\mathbf{x}_n^{(1)})
x(1)=(x1(1),x2(1),...,xn(1))表示原空间下的第1个
n
n
n维的样本。
根据协方差矩阵的定义,假设
X
,
Y
X,Y
X,Y表示两个具有
m
m
m个样本,
N
N
N个维度的数据集(
m
×
N
m\times N
m×N),我们得到,
C
x
x
=
X
T
X
,
C
x
y
=
X
T
Y
C_{\mathbf{x}\mathbf{x}}=X^TX,C_{\mathbf{x}\mathbf{y}}=X^TY
Cxx=XTX,Cxy=XTY
根据CCA的目标函数,我们依旧可以写目标函数(最大化相关系数)为:
ρ
=
max
a
,
b
a
T
C
x
y
b
a
T
C
x
x
a
b
T
C
y
y
b
=
max
a
,
b
a
T
X
T
Y
b
a
T
X
T
X
a
b
T
Y
T
Y
b
(1)
\rho = \max_{a,b} \frac{a^TC_{\mathbf{x}\mathbf{y}}b}{\sqrt{a^TC_{\mathbf{x}\mathbf{x}}a}\sqrt{b^TC_{\mathbf{y}\mathbf{y}}b}} = \max_{a,b} \frac{a^TX^TYb}{\sqrt{a^TX^TXa}\sqrt{b^TY^TYb}} \tag{1}
ρ=a,bmaxaTCxxabTCyybaTCxyb=a,bmaxaTXTXabTYTYbaTXTYb(1)
a T a^T aT表示转置。但是我们这里发现, C x y C_{\mathbf{x}\mathbf{y}} Cxy等是 N × N N\times N N×N的, a , b a,b a,b是 N × 1 N\times 1 N×1的,所以在核空间里不可求。为此,有一种转换的方法可以解决,就是将我们需要求解的 N N N维 a , b a,b a,b转成一个样本量维度的向量,即, m × 1 m\times 1 m×1。这种思想和kernel脊回归里求解连接参数 w w w的思想一致,只是kernel脊回归里借助的是一种不等式公式,而KCCA这里,是直接的变换:
a
=
X
T
α
,
b
=
Y
T
β
a=X^T\alpha,b=Y^T\beta
a=XTα,b=YTβ
这时,
α
,
β
\alpha,\beta
α,β是
m
×
1
m\times 1
m×1的。所以目标函数转换为,
ρ
=
max
α
,
β
α
T
X
X
T
Y
Y
T
β
α
T
X
X
T
X
X
T
α
⋅
β
T
Y
Y
T
Y
Y
T
β
.
(2)
\rho = \max_{\alpha,\beta} \frac{\alpha^TXX^TYY^T\beta}{\sqrt{\alpha^TXX^TXX^T\alpha \cdot \beta^TYY^TYY^T\beta}}. \tag{2}
ρ=α,βmaxαTXXTXXTα⋅βTYYTYYTβαTXXTYYTβ.(2)
令 K x = X X T , K y = Y Y T K_x=XX^T,K_y=YY^T Kx=XXT,Ky=YYT,即,
ρ = max α , β α T K x K y β α T K x 2 α ⋅ β T K y 2 β . (3) \rho = \max_{\alpha,\beta} \frac{\alpha^TK_xK_y\beta}{\sqrt{\alpha^TK_x^2\alpha \cdot \beta^TK_y^2\beta}}. \tag{3} ρ=α,βmaxαTKx2α⋅βTKy2βαTKxKyβ.(3)
现在我们发现,该目标函数写成了对偶的形式。观察公式(1)和(3),我们可以发现, α , β \alpha,\beta α,β的rescale并没有影响到目标函数的形式。
所以,KCCA的优化问题与CCA相同,都是希望找到两组最优系数 α , β \alpha,\beta α,β,使得两组变量的相关性最大。
- maximize α T K x K y β \alpha^TK_xK_y\beta αTKxKyβ,
- subject to: α T K x 2 α = 1 , β T K y 2 β = 1 \alpha^TK_x^2\alpha =1,\beta^TK_y^2\beta = 1 αTKx2α=1,βTKy2β=1。
How KCCA works?
根据目标函数(3)以及它的约束条件,对应的Lagrangian为:
L
(
λ
,
α
,
β
)
=
α
T
K
x
K
y
β
−
λ
α
2
(
α
T
K
x
2
α
−
1
)
−
λ
β
2
(
β
T
K
y
2
β
−
1
)
,
L(\lambda,\alpha,\beta) = \alpha^TK_xK_y\beta - \frac{\lambda_{\alpha}}{2}(\alpha^TK_x^2\alpha-1) - \frac{\lambda_{\beta}}{2}(\beta^TK_y^2\beta-1),
L(λ,α,β)=αTKxKyβ−2λα(αTKx2α−1)−2λβ(βTKy2β−1),
分别对
α
,
β
\alpha,\beta
α,β求偏导,得
∂
L
∂
α
=
K
x
K
y
β
−
λ
α
K
x
2
α
=
0
(4)
\frac{\partial L}{\partial \alpha} = K_xK_y\beta - \lambda_{\alpha}K_x^2\alpha = \bf0 \tag{4}
∂α∂L=KxKyβ−λαKx2α=0(4)
∂
L
∂
β
=
K
y
K
x
α
−
λ
β
K
y
2
β
=
0
(5)
\frac{\partial L}{\partial \beta} = K_yK_x\alpha - \lambda_{\beta}K_y^2\beta= \bf0 \tag{5}
∂β∂L=KyKxα−λβKy2β=0(5)
公式(4)左乘
α
T
\alpha^T
αT,公式(5)左乘
β
T
\beta^T
βT,再两式相减得到,
0
=
α
T
K
x
K
y
β
−
α
T
λ
α
K
x
2
α
−
β
T
K
y
K
x
α
+
β
T
λ
β
K
y
2
β
=
λ
β
β
T
K
y
2
β
−
λ
α
α
T
K
x
2
α
\begin{aligned} 0 = &\alpha^T K_xK_y\beta - \alpha^T \lambda_{\alpha}K_x^2\alpha - \beta^T K_yK_x\alpha + \beta^T \lambda_{\beta}K_y^2\beta \\ = & \lambda_{\beta} \beta^T K_y^2\beta - \lambda_{\alpha} \alpha^TK_x^2\alpha \end{aligned}
0==αTKxKyβ−αTλαKx2α−βTKyKxα+βTλβKy2βλββTKy2β−λααTKx2α
由优化目标的条件可知,核矩阵和系数不可能为0,所以
λ
β
−
λ
α
=
0
\lambda_{\beta}-\lambda_{\alpha}=0
λβ−λα=0。让
λ
=
λ
β
=
λ
α
\lambda = \lambda_{\beta}=\lambda_{\alpha}
λ=λβ=λα,结合公式(4)和(5),得(假设
K
x
,
K
y
K_x,K_y
Kx,Ky都是可逆的),
β
=
K
y
−
1
K
y
−
1
K
y
K
x
α
λ
=
K
y
−
1
K
x
α
λ
\begin{aligned} \beta &= \frac{K_y^{-1}K_y^{-1}K_yK_x\alpha }{\lambda} \\ &=\frac{K_y^{-1}K_x\alpha }{\lambda} \end{aligned}
β=λKy−1Ky−1KyKxα=λKy−1Kxα
K x K y K y − 1 K x α − λ 2 K x 2 α = 0 K_xK_yK_y^{-1}K_x\alpha - \lambda^2 K_x^2\alpha = \bf0 KxKyKy−1Kxα−λ2Kx2α=0
K x K x α − λ 2 K x 2 α = 0 K_xK_x\alpha - \lambda^2 K_x^2\alpha = \bf0 KxKxα−λ2Kx2α=0
I α = λ 2 α (6) I\alpha = \lambda^2 \alpha \tag{6} Iα=λ2α(6)
这是个求解特征根、特征向量的问题。我们乍一看,发现当 λ = 1 \lambda=1 λ=1的时候,等式(6)恒成立。所以对于 α \alpha α来说,我们可以自由取,即,可以取 α \alpha α等于一个 m m m维的单位向量,此时, β = 1 λ K y − 1 K x \beta=\frac{1}{\lambda}K_y^{-1}K_x β=λ1Ky−1Kx。所以,总的来说,只要 K x , K y K_x,K_y Kx,Ky是可逆的,我们可以得到完美的系数。但是,现实往往不是这么美好的,也就是这两个核矩阵不可逆的情况常常存在。所以,单纯地用KCCA去寻找合适的 α , β \alpha,\beta α,β使得相关性最大,是得不到好结果的。那么接下来,我们将讲解这类不可逆的问题是如何得到解决的。
Computational issues?
这部分除了介绍能解决不可逆问题的Regularization方法外(based on Partial Least Squares),也介绍解决样本量过大导致计算量过大的问题的方法(Gram-Schmidt orthogonolisation/incomplete Cholesky decomposition)。
Regularization
(1)在相关系数的分母的每一项方差项内,加入正则项,如
k
∣
∣
α
∣
∣
2
k||\alpha||^2
k∣∣α∣∣2,
ρ
=
max
α
,
β
α
T
K
x
K
y
β
(
α
T
K
x
2
α
+
k
∣
∣
α
∣
∣
2
)
(
˙
β
T
K
y
2
β
+
k
∣
∣
β
∣
∣
2
)
=
max
α
,
β
α
T
K
x
K
y
β
(
α
T
K
x
2
α
+
k
α
T
K
x
α
)
(
˙
β
T
K
y
2
β
+
k
β
T
K
y
β
)
.
\rho= \max_{\alpha,\beta}\frac{\alpha^TK_xK_y\beta}{\sqrt{(\alpha^TK_x^2\alpha + k||\alpha||^2)\dot(\beta^TK_y^2\beta + k||\beta||^2)}}\\ = \max_{\alpha,\beta}\frac{\alpha^TK_xK_y\beta}{\sqrt{(\alpha^TK_x^2\alpha + k\alpha^T K_x \alpha)\dot(\beta^TK_y^2\beta + k\beta^T K_y \beta)}} .
ρ=α,βmax(αTKx2α+k∣∣α∣∣2)(˙βTKy2β+k∣∣β∣∣2)αTKxKyβ=α,βmax(αTKx2α+kαTKxα)(˙βTKy2β+kβTKyβ)αTKxKyβ.
以上第二个等号成立的原因是:我们发现将正则项调整一下,并不会改变本身的优化问题。也就是,调整正则项前后,我们对Lagrangain等式进行求偏导,偏导函数是不变的。所以我们的优化问题就变成了如上所示,且需要服从条件:
subject to:
(
α
T
K
x
2
α
+
k
α
T
K
x
α
)
=
1
,
(
β
T
K
y
2
β
+
k
β
T
K
y
β
)
=
1
(\alpha^TK_x^2\alpha +k\alpha^T K_x \alpha)=1,(\beta^TK_y^2\beta + k\beta^T K_y \beta)= 1
(αTKx2α+kαTKxα)=1,(βTKy2β+kβTKyβ)=1.
所以,根据前面求解的过程,我们可以把最后结果化为以下求解特征问题:
(
K
x
+
k
I
)
−
1
K
y
(
K
y
+
k
I
)
−
1
K
x
α
=
λ
2
α
(K_x + kI)^{-1}K_y(K_y+kI)^{-1} K_x \alpha = \lambda^2 \alpha
(Kx+kI)−1Ky(Ky+kI)−1Kxα=λ2α.
具体的求解过程类似,可参见文献
[
2
]
[2]
[2]。
(2)在KCCA的Lagranrian等式后加上二次正则化项,即,
L
n
e
w
=
L
+
η
2
(
∣
∣
α
∣
∣
2
+
∣
∣
β
2
∣
∣
)
=
α
T
K
x
K
y
β
−
λ
α
2
(
α
T
K
x
2
α
−
1
)
−
λ
β
2
(
β
T
K
y
2
β
−
1
)
+
η
2
(
∣
∣
α
∣
∣
2
+
∣
∣
β
2
∣
∣
)
.
L_{new}=L+\frac{\eta}{2}(||\alpha||^2+||\beta^2||)\\ = \alpha^TK_xK_y\beta - \frac{\lambda_{\alpha}}{2}(\alpha^TK_x^2\alpha-1) - \frac{\lambda_{\beta}}{2}(\beta^TK_y^2\beta-1)+\frac{\eta}{2}(||\alpha||^2+||\beta^2||).
Lnew=L+2η(∣∣α∣∣2+∣∣β2∣∣)=αTKxKyβ−2λα(αTKx2α−1)−2λβ(βTKy2β−1)+2η(∣∣α∣∣2+∣∣β2∣∣).
根据同样的方法,该优化为一定可解。
Cholesky Decomposition
当训练集很大时,该问题的计算量会变得很大,而且准确率也会受到影响。为了解决这个问题,我们可以使用Partial Gram-Schmidt orthogonolisation的方法(等价于incomplete Cholesky Decomposition)来降低核矩阵的维度。以下为介绍(主要参考文献[2]):
- 首先,我们要先知道矩阵分解中的三角分解方法:它可以将一个矩阵分解为一个单位下三角 和 一个上三角矩阵的乘积
A
=
L
U
A=LU
A=LU,且有时候可以是和转置矩阵的乘积
A
=
L
L
T
A=LL^T
A=LLT。那什么时候可以是转置矩阵呢?下面的定理告诉你:
定理1:令A是对称的。如果分解 A = L U A=LU A=LU是可能的,那么 L L T = A LL^T = A LLT=A。
定理2:令A是对称且正定的。那么, A A A可以被分解成: L L T = A LL^T = A LLT=A。
三角分解的用途有很多,如解线性方程、求反矩阵或计算行列式等。如果还想深入了解它,可以自行在网上搜索。
三角分解是一种完整的矩阵分解方法。然后,一个核矩阵的完整分解(complete Cholesky Decomposition)的计算量也不小,而且难以处理现实生活中的数据。所以,以下引入Incomplete Cholesky Decomposition。
- Incomplete Cholesky Decomposition(ICD)详细算法可以参见文献[2]。主要思想是:每一次选择核矩阵的一列,通过贪婪最大化估计误差的下界来选择一列。Partial Gram-Schmidt orthogonolisation(PGSO)的方法也可以从文献[2]中得到参考,ICD与PGSO本质上是等价的,ICD是PGSO的对偶实现。
所以基于以上的思想,我们可以有基于 PGSO的KCCA、基于PGSO的KCCA Regularisation.
Q&A
-
如果有多组变量/集合 X , Y , Z . . . X,Y,Z... X,Y,Z...,怎么办?如何衡量多组变量/集合的关系?
A: 有一种方法称为“Generalization of the Canonical Correlation”,参考 [ 2 ] [2] [2]。该方法使得两两集合的距离之和最小。 -
如果协方差矩阵不可逆时,怎么办?
A: Regularization的方法,具体有两类方法:(1)在相关系数的分母的每一项方差项内,加入正则项;(2)在KCCA的Lagranrian等式后加上二次正则化项。具体见上文的Regularization部分。 -
如果数据样本量太大,导致算法效率低,怎么办?
A: 使用Cholesky decomposition、Incomplete Cholesky decomposition、Partial Gram-Schmidt Orthogonolisation等 -
可能有人会问:如何用CCA或KCCA来做预测?
A: 我们可以这样思考:利用CCA或KCCA,可以得到典型相关系数 a , b , α , β a,b,\alpha,\beta a,b,α,β。那么在给定一个新的样本 x n e w x_new xnew之后,可以利用得到的典型相关系数计算出 u n e w u_new unew;再从所有的 u u u中寻找离 u n e w u_{new} unew最近的几个 u ∗ u^* u∗对应的 x ∗ x^* x∗;再得到 x ∗ x^* x∗对应的 y ∗ y^* y∗,计算 y ∗ y^* y∗每一维度的均值,作为新样本 x n e w x_{new} xnew的预测值。这个做法参考博客[1]的理解,具体实验效果未验证过。
[
1
]
[1]
[1] http://www.cnblogs.com/jerrylead/archive/2011/06/20/2085491.html
[
2
]
[2]
[2] Hardoon D R, Szedmak S, Shawe-Taylor J. Canonical correlation analysis: An overview with application to learning methods[J]. Neural computation, 2004, 16(12): 2639-2664.