在sklearn中运行pairwise_distances时出现内存错误

时间:2019-11-25 17:42:40

标签: scikit-learn

有4000万个数据集。当我要计算jaccard时,它报告内存错误。如何改进我的代码?

result=[]
for line in open("./raw_data1"):
#for line in sys.stdin:
        #tagid_result = [0]*max_len
        tagid_result = [0]*34
        line = line.strip()
        fields = line.split("\t")
        if len(fields)<6:
                continue
        tagid = fields[3]
        tagids = tagid.split(":")
        try:
                for i in range(0,len(tagids)):
                        tagid_result[i] = int(tagids[i])
        except:
                continue
        result.append(tagid_result)
X=np.array(result)
distance_matrix = pairwise_distances(X, metric='jaccard')
print (distance_matrix)

1 个答案:

答案 0 :(得分:0)

您的RAM即将用完。要计算N个向量之间的距离,您必须存储N ^ 2个距离值。 4000万^ 2的数据太多,无法容纳到内存中。有两种选择:

1)您必须将矩阵X分成子集。为每个子集创建一个成对的距离矩阵。然后将这些成对的距离矩阵缝合在一起。

2)您应该创建所有向量对的数据集。将每个向量存储在其自己的文件中。创建一个函数来读取两个矢量文件,计算它们的距离,然后返回距离值。将此功能应用于所有向量对。连接距离结果以创建距离矩阵。可以并行运行此功能,以更有效地计算距离矩阵。

我将选择解决方案2。