2

背景

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

例如,矩阵大约有 800k 列和 300k 行,但对于每一列,只有两三行有值,而其他行是 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 天

4

0 回答 0