前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >实用的典型相关分析(多公式预警)

实用的典型相关分析(多公式预警)

作者头像
用户7506105
发布2021-08-06 15:22:51
9440
发布2021-08-06 15:22:51
举报
文章被收录于专栏:碎片学习录

在sklearn的交叉分解模块中有两种典型算法族,一个是本文所述的典型相关分析算法(CCA),一个是偏最小二乘算法(PLS),他们都是具有发现两个多元数据集之间的线性关系的用途,本文先解释典型相关分析。

假设有这样一个场景:生产一个零件需要用到多个原材料,而衡量一个零件的质量指标有多个(比如耐热性、物理性能强度等),现需要我们根据关联关系算出与多个质量指标最强相关的原材料因素,在这个场景中这些质量指标彼此都是相关的(比如抗拉强度越大可能硬度也越大),且原材料因素也会有强相关性(比如多加了某种材料导致另一种材料用料减少),该怎么想呢?

常见的,比如考虑一组因变量和一组自变量的关系的量化,这个可以根据各自变量对应的真实数据进行概率学上的相关系数或协方差矩阵算出,如果说因变量有q个,自变量有p个,那就需要计算p*q次,这不仅计算次数多而且会因为忽略变量间强相关性而抓不到问题本质从而得出错误的结果,所以自然而然会想到抽取同组变量的强相关性部分然后再求不同组的相关性,而抽取方法可以采用主成分的思想进行降维,这也是典型相关分析的思想所在(不过在具体抽取主成分有较大差异),典型相关分析本身是反映两组指标之间的整体相关性的一种多元统计分析方法

思想

因变量组和自变量组分别用一个线性表达式后的值来表示,这个时候每组的值构成第一对线性组合,使其具有最大的相关性(即协方差值最大),然后就可以根据最大的相关性对应的两个原变量线性表达式的系数来确定关联性程度,如果第一组变量不足以代表所有原始变量,则需再在每组变量中新找第二组线性组合值,使其分别与第一组线性不相关(即相互独立),且使得第二个组合具有最大的相关性,如此继续下去,直到两组变量的相关性被提取完为止,然后进行综合权重分析

详细过程

假设自变量为p个,因变量有q个,变量维数为n,即

Z_{n\times (p+q)} = (x_1,x_2,...,x_p; y_1,y_2,...,y_q)

显然先将Z的变量地位等同然后计算两两变量之间的协方差可以得到协方差矩阵Σ,利用分块矩阵的思想,转变成

\Sigma = \begin{bmatrix} \Sigma_{xx} & \Sigma_{xy}\\ \Sigma_{yx}& \Sigma_{yy} \end{bmatrix}

其中

\Sigma_{xx}

为自变量间的协方差矩阵,

\Sigma_{yy}

为因变量间的协方差矩阵,

\Sigma_{xy}

为混合协方差矩阵,且必然有

\Sigma_{xy} =\Sigma_{yx}^T

假设可用

u_1

表示自变量的线性表达式,

v_1

表示因变量的线性表达式,即

u_1 = X a_1
v_1 = Y b_1

这里

X = (x_1,x_2,...,x_p)

,

Y = (y_1,y_2,...,y_q)

,

a_1 = (a_1^1,a_2^1,...,a_p^1)

,

b_1 = (b_1^1,b_2^1,...,b_q^1)

则计算此时向量

u_1

v_1

的方差,即有

Var(u_1) = a_1 \Sigma_{xx} a_1^T = 1
Var(v_1) = b_1 \Sigma_{yy} b_1^T = 1

可用把

a_1

看成常数,根据方差公式

D(aX) = a^2D(X)

,类比到矩阵即可(tricks:

a_1

是向量,向量平方一定是自身与自身转置的乘积,然后再满足矩阵乘法维度变化即可),方差也可表示为自身与自身的协方差(相关性),所以这里等于1

所以此时的XY的协方差值为

Cov(u_1,v_1) = a_1 \Sigma_{xy}b_1^T

一般来说,做相关性分析都会标准化以消除量纲单位带来的影响,对应到这里即是

\alpha_1 = a_1 \Sigma_{xx}^{-\frac{1}{2}}

,

\beta_1 = b_1 \Sigma_{yy}^{-\frac{1}{2}}

,所以这里的方差等于1的条件就转化为了

\alpha_1 \alpha_1^T =1

,

\beta_1 \beta_1^T =1

此时就需要求在这个值最大时的

a_1

,

b_1

,此时就转化为约束优化问题,即

\max Cov(u_1,v_1) = a_1 \Sigma_{xy}b_1^T
s.t. \begin{cases} a_1 \Sigma_{xx} a_1^T = 1 \\ b_1 \Sigma_{yy} b_1^T = 1 \end{cases}

这里就又是约束条件极值的求法套路了,引入拉格朗日乘子λ和ν

\Phi(a_1, b_1) = a_1 \Sigma_{xy}b_1^T - \frac{\lambda}{2}(a_1 \Sigma_{xx} a_1^T - 1)
- \frac{\upsilon}{2}(b_1 \Sigma_{yy} b_1^T -1)

求偏导

\begin{cases} \frac{\partial \Phi}{\partial a_1} = \Sigma_{xy} b_1- \lambda \Sigma_{xx} a_1 = 0 \\ \frac{\partial \Phi}{\partial b_1} = \Sigma_{xy}^T a_1 - \upsilon \Sigma_{yy} b_1 = 0 \end{cases}

\begin{cases} \Sigma_{xy}b_1 - \lambda \Sigma_{xx} a_1 = \vec{0}\\ \Sigma_{xy}^T a_1 - \upsilon \Sigma_{yy} b_1 =\vec{0} \end{cases}

这个式子后面会用

第一个式子左乘

a_1^T

,第二个式子左乘

b_1^T

,即

\begin{cases} a_1^T\Sigma_{xy} b_1 - \lambda a_1^T \Sigma_{xx} a_1 = 0\\ b_1^T\Sigma_{xy}^T a_1 - \upsilon b_1^T\Sigma_{yy} b_1 = 0 \end{cases}

得到

\begin{cases} a_1^T\Sigma_{xy} b_1 = \lambda \\ b_1^T\Sigma_{xy}^T a_1 = \upsilon \end{cases}

可以看出这两个互为转置,而等式右边是常数,所以这两个拉格朗日系数相等,即

\lambda= \upsilon =\rho

代入前面的式子,即

\begin{cases} \Sigma_{xy} \Sigma_{yy}^{-1} \Sigma_{xy}^T a_1 - \lambda^2 \Sigma_{xx} a_1 = 0\\ \Sigma_{xx}^{-1} \Sigma_{xy} \Sigma_{yy}^{-1}\Sigma_{xy}^T a_1 - \lambda^2 a_1 = 0 \end{cases}

仔细观察第二个项,则可以发现,

\lambda^2

为矩阵

\Sigma_{xx}^{-1} \Sigma_{xy} \Sigma_{yy}^{-1}

的特征根,而此时的

a_1

为该矩阵对应于特征值为

\lambda^2

的特征向量,由于变量组地位等价,由坐标轮换性,很容易知道此时一定有

\Sigma_{yy}^{-1} \Sigma_{xy}^T \Sigma_{xx}^{-1}\Sigma_{xy} b_1 - \lambda^2 b_1 = 0

其实就是将

\Sigma

下标的x,y互换就行,令

\begin{cases} A = \Sigma_{xx}^{-1} \Sigma_{xy} \Sigma_{yy}^{-1}\\ B= \Sigma_{yy}^{-1} \Sigma_{xy}^T \Sigma_{xx}^{-1}\Sigma_{xy} \end{cases}

从而即简化成

\begin{cases} A a_1 = \lambda^2 a_1 \\ Bb_1 = \lambda^2 b_1 \end{cases}

这里除了拉格朗日乘数法还可以根据矩阵乘法的柯西-施瓦茨不等式进行推导,即

AB <= (AA^T)^{\frac{1}{2}}(B^TB)^{\frac{1}{2}}

由此第一对典型变量就提取成功了,这时这两个变量代表了原始X与Y之间的相关的主要部分,这时的两个变量线性组合的系数即为每个原始指标或因素的权重,找到每组权重最大的即可,就说明是强相关,但是往往这时第一次提取的两个变量

u_1

v_1

不足以解释所有的原始变量,则需要在新找另一组变量

u_2

v_2

,则此时转化为

\max Cov(u_2,v_2) = a_2 \Sigma_{xy}b_2^T
s.t. \begin{cases} a_2 \Sigma_{xx} a_2^T = 1 \\ b_2 \Sigma_{yy} b_2^T = 1 \\ Cov(u_1,u_2) = a_1 \Sigma_{xx} a_2^T = 0 \\ Cov(v_1,v_2) = b_1 \Sigma_{yy} b_2^T = 0 \\ \end{cases}

后面两项为独立性的约束,很显然这里的思想是排除因为第一组强相关向量的干扰

因为这里是用协方差(这里也是相关系数,因为数据进行标准化后两者等同)衡量独立性,所以很明显协方差为0就代表变量相互独立,互不相关,那么什么样的变量组间的协方差(相关系数)为0呢?我们知道如果相关系数等于1则说明两个变量是存在线性关系的,即共线或平行,那等于0的一定就是两组变量向量相互垂直了,所以这里不需要求上述的约束优化问题,只需要分别找第一组变量

u_1

v_1

的正交子空间即可,然后再在这些正交子空间里面寻找

u_k

v_k

,使得其协方差最大,不断循环下去,一定可以循环到min{p,q}时结束,因为n维空间一定有n个正交子空间相互直和,即

V_n = V_1^{\perp} \bigoplus V_2^{\perp} ... V_n^{\perp}

(高等代数yyds)

假如说得到了m对典型变量,如何衡量两组变量间的相关性呢?可以根据每对典型变量的相关系数做权重,分别与各个线性表达式的系数做乘法,然后综合系数最大的就一定是两组中最相关的因变量和自变量

性质

  • 同组(比如自变量组)的典型变量之间互不相关,即
Cov(u_i,u_j) = 0
  • 不同组但同对的典型变量相关,即
Cov(u_i,v_i) = \lambda_i^2 = \rho_i
  • 不同组且不同对的典型变量不相关,即
Cov(u_i,v_j) =0

这条依然可以根据正交子空间解释

总结

最近因为工作有deadline无法兼顾发文,深表抱歉!

典型相关分析是研究多组变量之间相关性的重要手段,它是关联与因果算法中较为重要的算法,在python的sklearn库中就有CCA的算法,这也是我在上家公司研究材料组织性能与工艺参数关联性的方法之一,此外,在语义分析领域、宏观经济走势与股票市场走势之间的关系,学科评估等应用场景,CCA和其变形都有较为广泛的运用。但其有个缺点就是不能量化这种关系,即不能建立变量间的函数模型,而且还要求变量都需服从正态分布或某种特定分布才行,至于函数量化关系可以在后续偏最小二乘算法中得到补充。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-07-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 碎片学习录 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 思想
  • 详细过程
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档