背景
我有一个稀疏数据集,例如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 天!