Canonical Correlation Analysis 典型相关分析
Canonical Correlation Analysis 典型相关分析
介绍
定义
典型相关分析(Canonical Correlation Analysis)12利用综合变量对之间的相关关系来反映两组指标之间的整体相关性的多元统计分析方法。
输入:两个随机变量组\(X = (x_1, \dots, x_n)\)和\(Y = (y_1, \dots, y_m)\)
输出:两个向量\(a\)和\(b\),第一对典型变量\(U = a'X\)和\(V = b'Y\)
目标:\(a'X\)和\(b'Y\)的相关系数\(\rho = \operatorname{corr}(a' X, b' Y)\)最大
起源
1936年由哈罗德·霍特林在《生物统计》期刊上发表的一篇论文《两组变式之间的关系》3首次引入。
优点
既考虑\(Y\)中的每个特征与\(X\)的所有特征的关联,也考虑了\(Y\)中的每个特征之间的关联。
缺点
CCA是寻找\(X\)和\(Y\)投影后\(U\)和\(V\)的关系,显然不能通过该关系来还原出\(X\)和\(Y\),也就是找不到\(X\)到\(Y\)的直接映射。这也是使用CCA预测时大多配上KNN的原因。
应用领域
多元统计分析方法
相关
- Kernel Canonical Correlation Analysis (KCCA)
当\(X\)和\(Y\)的关系是非线性的时候,我们可以尝试核函数(Kernel)方法 - Generalized Canonical Correlation
不止两个集合\(X\)和\(Y\),而是多个集合的关系。 - 主成分分析
- 奇异值分解
- Multilinear subspace learning
- RV coefficient
- Principal angles
- Regularized canonical correlation analysis
- Partial least squares regression
解法
设 \(\Sigma_{XX} = \operatorname{cov}(X, X)\) 和 \(\Sigma_{YY} = \operatorname{cov}(Y, Y)\)。
需要最大化的参数为
\(\rho = \frac{a' \Sigma_{XY} b}{\sqrt{a' \Sigma_{XX} a} \sqrt{b' \Sigma_{YY} b}}\).
第一步是定义一个基变更以及
\(c = \Sigma_{XX} ^{1/2} a\),
\(d = \Sigma_{YY} ^{1/2} b\).
因此我们有
\(\rho = \frac{c' \Sigma_{XX} ^{-1/2} \Sigma_{XY} \Sigma_{YY} ^{-1/2} d}{\sqrt{c' c} \sqrt{d' d}}\).
根据柯西-施瓦茨不等式,我们有
\(\left(c' \Sigma_{XX} ^{-1/2} \Sigma_{XY} \Sigma_{YY} ^{-1/2} \right) d \leq \left(c' \Sigma_{XX} ^{-1/2} \Sigma_{XY} \Sigma_{YY} ^{-1/2} \Sigma_{YY} ^{-1/2} \Sigma_{YX} \Sigma_{XX} ^{-1/2} c \right)^{1/2} \left(d' d \right)^{1/2}\),
\(\rho \leq \frac{\left(c' \Sigma_{XX} ^{-1/2} \Sigma_{XY} \Sigma_{YY} ^{-1} \Sigma_{YX} \Sigma_{XX} ^{-1/2} c \right)^{1/2}}{\left(c' c \right)^{1/2}}\).
如果向量 \(d\) 和 \(\Sigma_{YY} ^{-1/2} \Sigma_{YX} \Sigma_{XX} ^{-1/2} c\) 共线,那么上式相等。此外,如果 \(c\) 是矩阵 \(\Sigma_{XX} ^{-1/2} \Sigma_{XY} \Sigma_{YY} ^{-1} \Sigma_{YX} \Sigma_{XX} ^{-1/2}\) (见Rayleigh quotient) 最大特征值对应的特征向量,那么就可以得到相关的最大值。随后的典型变量对可以通过减少特征值的量级来得到。正交性保证了相关矩阵的对称性。
因此解法是:
- \(c\) 是 \(\Sigma_{XX} ^{-1/2} \Sigma_{XY} \Sigma_{YY} ^{-1} \Sigma_{YX} \Sigma_{XX} ^{-1/2}\) 的一个特征向量。
- \(d\) 是 \(\Sigma_{YY} ^{-1/2} \Sigma_{YX} \Sigma_{XX} ^{-1/2} c\) 的比例项。
相反地,也有:
- \(d\) 是 \(\Sigma_{YY} ^{-1/2} \Sigma_{YX} \Sigma_{XX} ^{-1} \Sigma_{XY} \Sigma_{YY} ^{-1/2}\) 的一个特征向量。
- \(c\) 是 \(\Sigma_{XX} ^{-1/2} \Sigma_{XY} \Sigma_{YY} ^{-1/2} d\) 的比例项。
把坐标反过来,我们有
- \(a\) 是 \(\Sigma_{XX} ^{-1} \Sigma_{XY} \Sigma_{YY} ^{-1} \Sigma_{YX}\) 的一个特征向量。
- \(b\) 是 \(\Sigma_{YY} ^{-1} \Sigma_{YX} \Sigma_{XX} ^{-1} \Sigma_{XY}\) 的一个特征向量。
- \(a\) 是 \(\Sigma_{XX} ^{-1} \Sigma_{XY} b\) 的比例项。
- \(b\) 是 \(\Sigma_{YY} ^{-1} \Sigma_{YX} a\) 的比例项。
那么相关变量定义为:
\(U = c' \Sigma_{XX} ^{-1/2} X = a' X\)\(V = d' \Sigma_{YY} ^{-1/2} Y = b' Y\)
实现
Python
Scikit-Learn
sklearn.cross_decomposition.CCA
http://scikit-learn.org/stable/modules/generated/sklearn.cross_decomposition.CCA.html
cca_example.py
1
2
3
4
5
6from sklearn.cross_decomposition import CCA
X = [[0., 0., 1.], [1.,0.,0.], [2.,2.,2.], [3.,5.,4.]]
Y = [[0.1, -0.2], [0.9, 1.1], [6.2, 5.9], [11.9, 12.3]]
cca = CCA(n_components=1)
cca.fit(X, Y)
X_c, Y_c = cca.transform(X, Y)output
1
2
3
4
5
6
7
8
9
10>>> X_c
array([[-1.3373174 ],
[-1.10847164],
[ 0.40763151],
[ 2.03815753]])
>>> Y_c
array([[-0.85511537],
[-0.70878547],
[ 0.26065014],
[ 1.3032507 ]])
Matlab
R
cancor
http://stat.ethz.ch/R-manual/R-devel/library/stats/html/cancor.html
FactoMineR
SAS
proc cancorr
应用
典型相关分析的用途很广。在实际分析问题中,当我们面临两组多变量数据,并希望研究两组变量之间的关系时,就要用到典型相关分析。 例如,为了研究扩张性财政政策实施以后对宏观经济发展的影响,就需要考察有关财政政策的一系列指标如财政支出总额的增长率、财政赤字增长率、国债发行额的增长率、税率降低率等与经济发展的一系列指标如国内生产总值增长率、就业增长率、物价上涨率等两组变量之间的相关程度。
又如,为了研究宏观经济走势与股票市场走势之间的关系,就需要考察各种宏观经济指标如经济增长率、失业率、物价指数、进出口增长率等与各种反映股票市场状况的指标如股票价格指数、股票市场融资金额等两组变量之间的相关关系。再如,工厂要考察所使用的原料的质量对所生产的产品的质量的影响,就需要对所生产产品的各种质量指标与所使用的原料的各种质量指标之间的相关关系进行测度。
又如,在分析评估某种经济投入与产出系统时,研究投入和产出情况之间的联系时,投入情况面可以从人力、物力等多个方面反映,产出情况也可以从产值、利税等方面反映。
再如在分析影响居民消费因素时,我们可以将劳动者报酬、家庭经营收入、转移性收入等变量构成反映居民收入的变量组,而将食品支出、医疗保健支出、交通和通讯支出等变量构成反映居民支出情况的变量组,然后通过研究两变量组之间关系来分析影响居民消费因素情况。
参考
Knapp T R. Canonical correlation analysis: A general parametric significance-testing system[J]. Psychological Bulletin, 1978, 85(2): 410.↩︎