首页 > 解决方案 > 计算大熊猫数据帧的距离矩阵 (1664599, 3935)

问题描述

我有一个形状为的熊猫数据框:

df.shape
(1664599, 3935)

基本上看起来像:

rws = ["user1","user2","user3","user4","user5","user6","user7","user8"]
cols = ["prod1","prod2","prod3","prod4","prod5"]

np.random.seed(0)
df = pd.DataFrame(np.random.binomial(1, 0.3, size=(len(rws), len(cols))), columns=cols, index=rws)

    prod1 prod2 prod3 prod4 prod5
user1   0   1   0   0   0
user2   0   0   1   1   0
user3   1   0   0   1   0
user4   0   0   1   1   1
user5   1   1   0   1   0
user6   0   0   1   0   0
user7   0   1   0   0   0
user8   0   0   0   1   0

对于每个用户,我想用 jaccard 度量计算 k 个最近的邻居。

我试图通过以下方法来实现这一点:

from sklearn.neighbors import BallTree

ballt = BallTree(df, leaf_size = 30, metric = 'jaccard')
distances, neighbors = ballt.query(df, k=10)
    

但是我的 60 GB 内存还不够,我的 python 内核最终崩溃了。

如何执行此计算?

标签: pythonpandasmemory-managementscikit-learndistance

解决方案


推荐阅读