天天看点

Python 数据分析实例——典型相关分析

作者:昌华量化
Python 数据分析实例——典型相关分析

简单相关系数描述两组变量的相关关系存在一个缺点:只是孤立考虑单个X与单个Y间的相关,没有考虑X、Y变量组内部各变量间的相关。两组间有许多简单相关系数,使问题显得复杂,难以从整体描述。本节讲述的典型相关是简单相关、多重相关的推广。典型相关是研究两组变量之间相关性的一种统计分析方法,也是一种降维技术。

1.典型相关分析

CCA(Canonical Correlation Analysis,典型相关分析)是利用综合变量对之间的相关关系来反映两组指标之间的整体相关性的多元统计分析方法。它的基本原理是:为了从总体上把握两组指标之间的相关关系,分别在两组变量中提取有代表性的两个综合变量U1和V1(分别为两个变量组中各变量的线性组合),利用这两个综合变量之间的相关关系来反映两组指标之间的整体相关性。

典型相关分析是常用的挖掘数据关联关系的算法之一。比如我们拿到两组数据,第一组是人身高和体重的数据,第二组是对应的跑步能力和跳远能力的数据。那么我们能不能说这两组数据是相关的呢?典型相关分析可以帮助我们分析这个问题。

2.典型相关分析概述

在数理统计中,对相关系数这个概念应该很熟悉。假设有两组一维的数据集X和Y,则相关系数ρ的定义为:

Python 数据分析实例——典型相关分析

其中,cov(X,Y)是X和Y的协方差,而D(X)、D(Y)分别是X和Y的方差。相关系数ρ的取值为[-1,1],ρ的绝对值越接近1,则X和Y的线性相关性越高;越接近于0,则X和Y的线性相关性越低。

虽然相关系数可以很好地帮助我们分析一维数据的相关性,但是对于高维数据,就不能直接使用相关系数了。如上所述,如果X是包括人身高和体重两个维度的数据,而Y是包括跑步能力和跳远能力两个维度的数据,就不能直接使用相关系数的方法。那么我们能不能变通一下呢?典型相关分析给了我们变通的方法。

典型相关分析使用的方法是将多维的X和Y都用线性变换为1维的X'和Y',然后使用相关系数来看X'和Y'的相关性。将数据从多维变到1维,也可以理解为典型相关分析是在降维,将高维数据降到1维,再用相关系数进行相关性的分析。

3.典型相关分析算法思想

上面提到典型相关分析是将高维的两组数据分别降维到1维,然后用相关系数分析相关性。但是有一个问题是,降维的标准是如何选择的呢?回想一下主成分分析(PCA),降维的原则是投影方差最大;再回想一下线性判别分析(LDA),降维的原则是同类的投影方差小,异类间的投影方差大。对于典型相关分析,它选择的投影标准是降维到1维后,两组数据的相关系数最大。

假设数据集是X和Y,X为n1×m的样本矩阵,Y为n2×m的样本矩阵,其中m为样本个数,而n1、n2分别为X和Y的特征维度。对于X矩阵,将其投影到1维,对应的投影向量为a,对于Y矩阵,将其投影到1维,对应的投影向量为b,这样X、Y投影后得到的一维向量分别为X'、Y'。则有:

Python 数据分析实例——典型相关分析

典型相关分析的优化目标是最大化ρ(X',Y'),得到对应的投影向量a和b,即:

Python 数据分析实例——典型相关分析

在投影前,一般会把原始数据标准化,得到均值为0而方差为1的数据X和Y。这样有:

Python 数据分析实例——典型相关分析

由于X、Y的均值均为0,则:

Python 数据分析实例——典型相关分析

令SXY=cov(X,Y),则优化目标可以转化为:

Python 数据分析实例——典型相关分析

由于分子、分母增大相同的倍数,优化目标结果不变,因此可以采用和SVM(支持向量机)类似的优化方法,固定分母,优化分子,具体的转化为:

Python 数据分析实例——典型相关分析

4.特征值分解求典型相关分析

特征值分解方式比较传统,利用拉格朗日函数优化目标转化为最大化,如:

Python 数据分析实例——典型相关分析

分别对a、b求导并令结果为0,得:

Python 数据分析实例——典型相关分析

进而:

Python 数据分析实例——典型相关分析

现在拉格朗日系数就是我们要优化的目标。继续将上面的两个式子(8.40)进行整理得:

Python 数据分析实例——典型相关分析

将式(8.33)的下式代入上式得到:

Python 数据分析实例——典型相关分析

要求最大的相关系数λ,只需要对上面的矩阵进行特征分解,找出最大的特征值取平方根即可,此时最大特征值对应的特征向量即为X的线性系数a。使用同样的办法,可以找到最大特征值对应的特征向量即为Y的线性系数b。

【例1】

使用Python实现典型相关分析:

Python 数据分析实例——典型相关分析
Python 数据分析实例——典型相关分析
Python 数据分析实例——典型相关分析

输出:

Python 数据分析实例——典型相关分析

典型相关分析算法广泛地应用于数据相关度的分析,同时还是偏最小二乘法的基础。但是由于它依赖于数据的线性表示,当我们的数据无法线性表示时,典型相关分析就无法使用,此时我们可以利用核函数的思想将数据映射到高维后,再利用典型相关分析的思想降维到1维,求对应的相关系数和线性关系,这个算法一般称为核典型相关分析(KCCA)。深度典型相关性分析(DCCA),在线性的典型相关分析上增加了深度网络,以此来学习新特征并提高多模态数据之间的相关性。