在 scikit-learn for Python 中,有一个带有规范相关分析 (CCA) 类的模块调用cross_decomposition。 我一直在试图弄清楚如何给出形状 (n,m) 的 2 类多维向量并获得第一个规范相关系数。 查看文档,下面是一个小示例脚本。
from sklearn.cross_decomposition import CCA
import numpy as np
U = np.random.random_sample(500).reshape(100,5)
V = np.random.random_sample(500).reshape(100,5)
cca = CCA(n_components=1)
cca.fit(U, V)
cca.coef_.shape # (5,5)
U_c, V_c = cca.transform(U, V)
U_c.shape # (100,1)
V_c.shape # (100,1)
我真的不明白如何使用这个类来获得两个矩阵之间的第一个规范相关性,这就是我所需要的。 它似乎通常针对分类和预测问题,但我只需要第一个规范相关系数,没有别的。 我知道还有其他一些与此类似的帖子,但这个问题仍未得到解答,最好的建议是更改为 MATLAB,这是一个非解决方案。 任何帮助,不胜感激。
给定变换矩阵U_c
和V_c
,您确实可以像以前一样检索规范分量相关性,更一般地说,对于具有n_comp
CC 的 CCA:
result = np.corrcoef(U_c.T, V_c.T).diagonal(offset=n_comp)
现在,您不必自己tranform
数据,至少在拟合过程中已经完成了训练数据。分数由scikit-learn存储在CCA
实例中,因此:
score = np.diag(np.corrcoef(cca.x_scores_, cca.y_scores_, rowvar=False)[:n_comp, n_comp:])
将给出相同的结果,一个n_comp
标量值的向量,对应于分数,或每对规范分量之间的相关性。
好吧,在查看pyrcca中的源代码的帮助下,我设法创建了这段代码来获得第一个规范相关性。
cca = CCA(n_components=1)
U_c, V_c = cca.fit_transform(U, V)
result = np.corrcoef(U_c.T, V_c.T)[0,1]
希望这对其他人有所帮助。
注意:上面提到的pyrcca软件包的运行速度比sci-kit learn的要快一些,因为对于任何好奇的人来说,多核处理的使用量更大。 此外,他们实现了与sklearn不同的内核CCA。