减少大型协方差矩阵的计算时间和要求

Reducing calculation time and requirements for large covariance matrix

我目前正在尝试计算 ~30k 行矩阵的协方差矩阵(所有值都在 [0,1] 范围内),并且它花费了很长时间(我让它 运行 一个多小时,它仍然没有完成)。

我在较小的示例(7k 行矩阵)中注意到的一件事是输出的值具有荒谬的有效数字(例如 ~10^32)并且可能会减慢速度(并增加文件大小)- -有什么办法可以限制这个吗?

我一直在一个简单的数据帧上使用 numpys 协方差方法:

import numpy as np
import pandas as pd
import sklearn as sk

df = pd.read_csv('gene_data/genetic_data25.csv')

df = df.set_index('ID_REF')
df = (df-df.min(axis = 0))/(df.max(axis = 0)-df.min(axis = 0))

cov = np.cov(df)

cov = pd.DataFrame(cov)

cov.to_csv('/gemnetics/cov_matrix.csv')

由于我不熟悉遗传学,所以我会给你一般的指导方针,希望它能奏效。 假设您的数据位于一个名为 X 的矩阵中,它是 30+k x 1k。你真的不需要标准化你的数据(除非它对你来说无关紧要)但是要计算协方差你必须将它居中。然后你可以计算出正确的特征向量:

Xp=X-X.mean(axis=0,keepdims=True)
k=Xp.T @ Xp
ev,R=np.linalg.eigh(k)
ev=ev[::-1]
R=R[:,::-1]

此时你应该查看特征值,看看它们是否有任何突然下降(这是 Scree 方法),我们称这个截止数为 n。如果不是,那么您只需选择要保留的特征值的百分比。 下一步将重建左特征向量:

L=X @ R[:,:n]

现在 R.T 告诉您哪些特征向量组合很重要,而特征向量 (L) 是您的基因最突出的组合。 希望对您有所帮助。