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



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

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)

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

1( 您必须将矩阵 X 拆分为子集。为每个子集创建成对距离矩阵。然后将这些成对距离矩阵拼接在一起。

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

我会选择解决方案 2。

最新更新