CCA是数据挖掘中重要的算法,可以挖掘出数据间的关联关系的算法。
基础知识
如何衡量两个变量之间的相关性呢?我们有相关系数,如下所示:
值的绝对值越接近1,说明X与Y的线性相关性越高
值的绝对值越接近0,说明X与Y的线性相关性越低
算法思想
CCA将多维数据利用线性变换投影为1维的数据,然后计算的相关系数,进而得到二者的相关性。
那么我们的投影标准就是:
投影后,两组数据的相关系数最大。(这样我们就能挖掘出最相关的特征了。)
算法推导
假设投影向量分别为, 则投影后的数据为:
则:
假设我们的原始数据是标准化的,即均值为0,方差为1,则:
因为均值为0,有:
令
我们的问题就转化为:
问题转化为:
则根据拉格朗日乘子法,有:
求导有:
所以有:
所以有:
可以推出:
因此有:
对上面的式子进行特征值分解,那么特征值的平方根的最大值的特征向量就是我们求得的向量a
同理可以求得向量b
基于SVD的推导
其实算法也可以通过svd分解的算法求得,如下所示:
令:
则问题转化为:
这里都是单位正交基。
令:
对M进行奇异值分解,有:
因此有:
因为都是单位正交基矩阵, 且都是单位正交基。
所以有是只有一个标量值为1,其他值为0的向量。
所以只要是最大的奇异值即可。
因此问题转换为对做奇异值分解,得到,进而得到
进而得到:
后记
我们看到CCA可以用作分析向量的相关性,一定意义上,也可以用作降维。
但是CCA最重要的一个应用还是特征融合,即根据两组特征找到相关性最大的特征,这样可以利用较好的特征来从较差的特征中进行进一步的特征抽取,提高分类效果。