特征抽取 典型关联分析CCA
2021-9-10
| 2023-8-6
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
Property
 
如果有两组数据,第一组是人身高和体重的数据,第二组是对应的跑步能力和跳远能力的数据。那么能不能说这两组数据是相关的呢?CCA可以帮助分析这个问题。

CCA

假设有两组一维的数据集,相关系数的定义为:
的协方差,而分别是 的方差。相关系数 的取值为 , 的绝对值越接近于1,则X和Y的线性相关性越高。越接近于0,则X和Y的线性相关性越低。
虽然相关系数可以很好的分析一维数据的相关性,但是对于高维数据就不能直接使用了。如果 是包括人身高和体重两个维度的数据,而 是包括跑步能力和跳远能力两个维度的数据,就不能直接使用相关系数的方法。
能不能变通一下呢?
CCA使用的方法是将多维的 都用线性变换为1维的,然后再使用相关系数来看 的相关性。将数据从多维变到1维,也可以理解为CCA是在进行降维,将高维数据降到1维,然后再用相关系数进行相关性的分析。
 

CCA的算法思想

CCA是将高维的两组数据分别降维到1维,然后用相关系数分析相关性。但是有一个问题是,降维的标准是如何选择的呢?PCA降维的原则是投影方差最大;LDA降维的原则是同类的投影方差小,异类间的投影方差大。对于CCA,它选择的投影标准是降维到1维后,两组数据的相关系数最大
 
假设数据集是的样本矩阵,的样本矩阵,为样本个数,分别为的特征维度。
对于 矩阵,将其投影到1维,或者说进行线性表示,对应的投影向量或者说线性系数向量为,对于矩阵,将其投影到1维,或者说进行线性表示,对应的投影向量或者说线性系数向量为, 这样投影后得到的一维向量分别为。有
CCA的优化目标是最大化 得到对应的投影向量,即
在投影前一般会把原始数据进行标准化,得到均值为0而方差为1的数据,这样有:
由于的均值均为0,则:
,则优化目标可以转化为:
由于分子分母增大相同的倍数,优化目标结果不变,可以采用和SVM类似的优化方法,固定分母,优化分子,具体的转化为:
CCA算法的目标最终转化为一个凸优化过程,只要求出了这个优化目标的最大值,就是前面的多维 的相关性度量,而对应的 则为降维时的投影向量,或者说线性系数。
这个函数优化一般有两种方法,第一种是奇异值分解SVD,第二种是特征分解,两者得到的结果一样。

CCA的SVD求解

对于上面的优化目标,做一次矩阵标准化,就可以用SVD来求解了。
首先,令,这样有:
也就是说,优化目标变成下式:
如果将 看做矩阵 的某一个奇异值对应的左右奇异向量。那么利用奇异值分解,可以得到 ,其中 分别为的左奇异向量和右奇异向量组成的矩阵,而的奇异值组成的对角矩阵。由于 所有的列都为标准正交基,则 得到一个只有一个标量值为1,其余标量值为0的向量。此时有
也就是说最大化 ,其实对应的最大值就是某一组左右奇异向量所对应的奇异值的最大值。也就是将 做了奇异值分解后,最大的奇异值就是优化目标的最大值,或者说之间的最大相关系数。利用对应的左右奇异向量 也可以求出原始的的线性系数
 

CCA算法的特征分解求解

也可以用传统的拉格朗日函数加上特征分解来完成这个函数的优化。
特征分解方式就比较传统了,利用拉格朗日函数,优化目标转化为最大化下式:
分别对 求导并令结果为0,得到:
将上面第一个式子左乘,第二个式子左乘 ,并利用,得到
也就是说拉格朗日系数就是要优化的目标
继续将上面的两个式子做整理,第一个式子左乘,第二个式子左乘,得到:
将上面第二个式子带入第一个式子,得到
这不就是特征分解吗!要求最大的相关系数 ,只需要对矩阵做特征分解,找出最大的特征值取平方根即可,此时最大特征值对应的特征向量即为 的线性系数
 
同样,第一个式子带入第二个式子,得到,只需对矩阵做特征分解,找出最大的特征值取平方根即可,此时最大特征值对应的特征向量即为Y的线性系数
 
可以看出特征分解的方法要比SVD复杂,但是两者求得的结果其实是等价的,只要利用SVD和特征分解之间的关系就很容易发现两者最后的结果相同。

CCA算法流程

这里以SVD方法为准对CCA的算法流程做一个总结:
输入:各为 个的样本 的维度都大于1
输出: 的相关系数的线性系数向量
 
  1. 计算的方差, 的方差 的协方差 , 的协方差
  1. 计算矩阵
  1. 进行奇异值分解,得到最大的奇异值 和最大奇异值对应的左右奇异向量
  1. 计算的线性系数向量, 推广
 

推广

CCA算法广泛的应用于数据相关度的分析,同时还是偏最小二乘法的基础。但是由于它依赖于数据的线性表示,当数据无法线性表示时,CCA就无法使用,此时可以利用核函数的思想,将数据映射到高维后,再利用CCA的思想降维到1维,求对应的相关系数和线性关系,这个算法一般称为KCCA。
 
此外,算法里只找了相关度最大的奇异值或者特征值,作为数据的相关系数,实际上也可以像PCA一样找出第二大奇异值,第三大奇异值,......。得到第二相关系数和第三相关系数。然后对数据做进一步的相关性分析。但是一般的应用来说,找出第一相关系数就可以了。
有时候矩阵 不可逆,此时得不到对应的逆矩阵,一般遇到这种情况可以对 进行正则化,将变化为 ,然后继续求逆,为正则化系数。
 
 

代码

  • Scikit-Learn
  • 特征抽取 独立成分分析ICA特征抽取 多维尺度分析MDS
    目录