【发布时间】:2018-07-27 23:39:55
【问题描述】:
我目前正在尝试计算约 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')
【问题讨论】:
-
你的矩阵有多少列?
cov的输出应该被标准化,所以那些大数字没有意义。您应该知道是否有一个一维比另一维大得多的矩形矩阵(在您的情况下为行),那么由于空空间,以这种方式求解 cov 矩阵效率低下。 -
在这种情况下,我们有大约 10^3 列的东西,所以它不是方阵。我没有考虑过空格,谢谢你提出这个问题
-
请问下一步是什么?可能有一种方法可以用正确的特征值来处理问题,而不是形成整个协方差矩阵。
-
我正在尝试多种方法来尝试构建有向无环图,使用协方差值作为节点之间的权重(例如矩阵中的行。矩阵是一系列实验中的基因表达值,并且我想看看数据是否可以显示哪些基因组相互作用,以及以何种方式相互作用)。我猜特征值也可以做到这一点。
-
似乎应该很快;如今,30k x 1k 并不算大,当然 YMMV。也许 df 类中有一些意想不到的开销——也许尝试将 csv 读入 R 或 Octave 并在那里计算协方差。也许尝试列子集以查看所需时间如何扩展,从而估计所有 1k 列所需的时间。从更大的角度来看,我想知道有向图在这里是否合适,因为协方差似乎更自然地是无向的。听起来您正在寻找无向图中的派系——也许已经在这方面做了一些工作。
标签: python numpy statistics covariance-matrix