python 典型相关分析_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

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

SAS

应用

典型相关分析的用途很广。在实际分析问题中,当我们面临两组多变量数据,并希望研究两组变量之间的关系时,就要用到典型相关分析。 例如,为了研究扩张性财政政策实施以后对宏观经济发展的影响,就需要考察有关财政政策的一系列指标如财政支出总额的增长率、财政赤字增长率、国债发行额的增长率、税率降低率等与经济发展的一系列指标如国内生产总值增长率、就业增长率、物价上涨率等两组变量之间的相关程度。

又如,为了研究宏观经济走势与股票市场走势之间的关系,就需要考察各种宏观经济指标如经济增长率、失业率、物价指数、进出口增长率等与各种反映股票市场状况的指标如股票价格指数、股票市场融资金额等两组变量之间的相关关系。再如,工厂要考察所使用的原料的质量对所生产的产品的质量的影响,就需要对所生产产品的各种质量指标与所使用的原料的各种质量指标之间的相关关系进行测度。

又如,在分析评估某种经济投入与产出系统时,研究投入和产出情况之间的联系时,投入情况面可以从人力、物力等多个方面反映,产出情况也可以从产值、利税等方面反映。

再如在分析影响居民消费因素时,我们可以将劳动者报酬、家庭经营收入、转移性收入等变量构成反映居民收入的变量组,而将食品支出、医疗保健支出、交通和通讯支出等变量构成反映居民支出情况的变量组,然后通过研究两变量组之间关系来分析影响居民消费因素情况。

参考

Knapp T R. Canonical correlation analysis: A general parametric significance-testing system[J]. Psychological Bulletin, 1978, 85(2): 410.↩︎

<p> <span> </span> </p> <h3 class="ql-long-26664262"> <p style="font-size:13pt;"> <span> </span> </p> <div class="ql-long-26664262"> <span style="color:#337FE5;font-size:14px;">【为什么学Python】</span> </div> <p> <span><span style="font-weight:400;"><strong></strong></span></span> </p> <p style="font-size:13pt;"> <span style="color:#494949;font-weight:normal;font-size:14px;">Python 是当今非常热门的语言之一,2020年的 TIOBE 编程语言排行榜中 ,Python名列第一,并且其流行度依然处在上升势头。</span> </p> </h3> <p> <img alt="" src="https://img-bss.csdnimg.cn/202006020826291344.png" /><span style="font-size:14px;"></span> </p> <p> <span style="color:#494949;font-size:14px;">在2015年的时候,在网上还经常看到学Python还是学R的讨论,那时候老齐就选择了Python,并且开始着手出版《跟老齐学Python》。时至今日,已经无需争论。Python给我们带来的,不仅仅是项目上的收益,我们更可以从它“开放、简洁”哲学观念中得到技术发展路线的启示。</span> </p> <p> <br /> </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <span style="font-size:14px;">借此机会,老齐联合CSDN推出了本课程,希望能影响更多的人走进Python,踏入编程的大门。</span> </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <span style="font-size:14px;"><br /> </span> </p> <p> <span> </span> </p> <h3 class="ql-long-26664262"> <p> <span style="color:#337FE5;"><span style="font-size:14px;color:#337FE5;">【课程设计】</span></span> </p> <p style="font-size:12pt;"> <span style="font-size:14px;color:#494949;font-weight:normal;"><br /> </span> </p> <p style="font-size:12pt;"> <span style="font-size:14px;color:#494949;font-weight:normal;">本课程共包含三大模块:</span> </p> </h3> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <strong class="ql-author-26664262 ql-size-12"><span style="color:#000000;font-size:14px;"><br /> </span></strong> </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <strong class="ql-author-26664262 ql-size-12"><span style="color:#000000;font-size:14px;">一、基础知识篇</span></strong> </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <span style="font-size:14px;">内置对象和基本的运算、语句,是Python语言的基础。本课程在讲解这部分知识的时候,不是简单地将各种知识做简单的堆砌,而是在兼顾内容的全面性的同时,更重视向学习者讲授掌握有关知识的方法,比如引导学习者如何排查错误、如何查看和理解文档等。</span> </p> <p style="font-size:11pt;color:#494949;"> <span style="font-size:14px;"> </span> </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <strong class="ql-author-26664262 ql-size-12"><span style="color:#000000;font-size:14px;">二、面向对象篇</span></strong> </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <span style="font-size:14px;">“面向对象(OOP)”是目前企业开发主流的开发方式,本课程从一开始就渗透这种思想,并且在“函数”和“类”的学习中强化面向对象开发方式的学习——这是本课程与一般课程的重要区别,一般的课程只在“类”这里才提到“对象”,会导致学习者茫然失措,并生畏惧,乃至于放弃学习。本课程则是从开始以“润物细无声”的方式,渗透对象概念,等学习到本部分的时候,OOP对学习者而言有一种“水到渠成”的感觉。</span> </p> <p style="font-size:11pt;color:#494949;"> <span style="font-size:14px;"> </span> </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <strong class="ql-author-26664262 ql-size-12"><span style="color:#000000;font-size:14px;">三、工具实战篇</span></strong> </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <span style="font-size:14px;">在项目实战中,除了前述的知识之外,还会用到很多其他工具,至于那些工具如何安装?怎么自己做工具?有那些典型工具?都是这部分的内容。具体来说,就是要在这部分介绍Python标准库的应用以及第三方包的安装,还有如何开发和发布自己的工具包。此外,很多学习Python的同学,未来要么从事数据科学、要么从事Web开发,不论哪个方向,都离不开对数据库的操作,本部分还会从实战的角度,介绍如何用Python语言操作常用数据库。</span> </p> <p> <br /> </p> <p class="16" style="margin-left:21pt;text-indent:0pt;"> <span style="color:#E53333;"></span> </p>
表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页