在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,这是一个非解决方案。任何帮助表示赞赏。
答案 0 :(得分:3)
好吧,在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学习快一些,因为对于任何好奇的人来说,多核处理的使用会更多。他们还实现了内核CCA,与sklearn不同。
答案 1 :(得分:2)
考虑到变换后的矩阵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
标量值的向量(对应于分数)或每对规范成分之间的相关性。