在大型稀疏矩阵中计算所有列之间的皮尔逊系数的最快方法是什么?

时间:2019-04-02 01:01:27

标签: python pandas numpy pearson-correlation recommender-systems

背景

我有一个稀疏的数据集,例如Amazon Review Data。我想计算所有列之间的PCC(皮尔逊相关系数),并将其保存以备后用。但是,获取结果很耗时。

例如,矩阵有大约80万列和30万行,但是对于每一列,只有两行或三行具有值,而其他行则为0(缺失值)。

是否可以在合理的时间内获得PCC矩阵?

我尝试过的

我正在使用 Python 来完成这项工作。 我尝试过的方法包括:

    1。
import pandas as pd

# Gets the sparse DataFrame
dfs = pd.DataFrame(...)

# dfs.shape is (300k, 800k)

pcc = dfs.corr()

# save pcc

2。

# Transfers `dfs` to dense DataFrame dfd
# Format: (column_id, row_id, value)

vals = dfd.values
col_ids = np.unique(vals[:, 0]).tolist()

# Get all of the combinations between column indices.
# However, It takes about 2 BILLION iterations.
for i, j in combinations(col_ids, 2):
    # Get matrix of col_id equals `i` and `j`
    i_val = vals[vals[:, 0] == i]
    j_val = vals[vals[:, 0] == j]

    # Calc PCC of `i_val` and `j_val`
    pcc = pcc(i_val, j_val)
# Save all `pcc` into a matrix

在python中,我使用了一个进程和一个线程来模拟执行for loop,例如:

import progressbar
import time

total = 2000000000
for i in progressbar.progressbar(range(total)):
    time.sleep(0.005) # The actual time is much larger than 0.005s

这将花费大约 200天 ...

有解决方案吗?

因此,您能帮我解决这个问题还是换个角度考虑一下?

感谢您 200天

0 个答案:

没有答案