【发布时间】:2015-12-14 18:30:14
【问题描述】:
我正在使用cPickle 存储一个字典,其项目是来自sklearn.cluster 的聚类对象,这些对象进行k-means 聚类。我在拆解时得到的字典看起来很好,而且似乎可以工作。但是,当我将它与输入字典进行比较时,它的计算结果为 False。
amino_acid = 'ILE'
clusterers = {'2 ILE_chi1': MiniBatchKMeans(...),
'2 ILE_chi2': MiniBatchKMeans(...)}
output = open(''.join([amino_acid, '.pkl']), 'wb')
cPickle.dump(clusterers, output, -1)
output.close()
# Test that we can unpickle it.
input = open(''.join([amino_acid, '.pkl']), 'rb')
unpickled = cPickle.load(input)
print type(unpickled)
if clusterers == unpickled:
print "Pickled successfully."
print clusterers
else:
print "Didn't pickle."
print unpickled
print clusterers
print type(unpickled['2 ILE_chi1'])
print unpickled.keys() == clusterers.keys()
print unpickled.values() == clusterers.values()
input.close()
对应的输出:
Didn't pickle.
{'2 ILE_chi1': MiniBatchKMeans(...), '2 ILE_chi2': MiniBatchKMeans(...)}
{'2 ILE_chi1': MiniBatchKMeans(...), '2 ILE_chi2': MiniBatchKMeans(...)}
<class 'sklearn.cluster.k_means_.MiniBatchKMeans'>
True
False
有人知道为什么MiniBatchKMeans 实例不相等吗? relevant page 在这个特定问题上不是很有帮助。我可以看一下sklearn 源,但它继承自多个类,我想知道这里是否有人能够更快地解释。
【问题讨论】:
-
如果你通过简单地说
unpickled == clusterers来比较它们会发生什么?它们的键和值可以按任何顺序返回,因此很难使用这两种方法进行比较。 -
对不起,我在第一次迭代中包含了它。他们不比较平等。我认为我的问题可能是 Tom Dalton 在下面提出的建议。
标签: python scikit-learn pickle