python泡菜不一致

时间:2016-12-14 13:56:41

标签: python python-2.7 python-3.x pickle xgboost

我在Ubuntu上使用python3.5。我用xgboost sklearn包装器训练了一个模型并用pickle保存。

以下是pickle文件的链接: https://pan.baidu.com/s/1eSoPWxs

问题是每次加载它时,结果都不同。

例如:

a = pickle.load(open('mymodel', 'rb'))

b = pickle.load(open('mymodel', 'rb'))

print(a == b)

我得到了结果False,但我认为它应该是True

有人可以解释一下吗?有什么方法可以解决这个问题吗?

非常感谢!

2 个答案:

答案 0 :(得分:1)

如果未安装sklearn,则XGBoostModel的基类与object相同:

XGBModelBase = object

您可能已经知道object的两个实例不相等:

>>> import pickle
>>> pickle.dump(object(), open('test.txt', 'wb'))
>>> a = pickle.load(open('test.txt', 'rb'))
>>> b = pickle.load(open('test.txt', 'rb'))
>>> a == b
False
>>> object() == object()
False

我希望在安装sklearn的情况下,__eq__在基类XGBModelBase上的行为是一致的。

另请注意,__eq__未在模型类中重写,因此您的行为符合预期。

您可以尝试比较未打印模型的字典,看看它是否适合您:a.__dict__ == b.__dict__

答案 1 :(得分:0)

最后我发现了问题,这与pickle无关。还有一些东西会导致每次运行中的一些随机化。

感谢您的帮助!抱歉打扰!