我在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
。
有人可以解释一下吗?有什么方法可以解决这个问题吗?
非常感谢!
答案 0 :(得分:1)
如果未安装sklearn,则XGBoostModel
的基类与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无关。还有一些东西会导致每次运行中的一些随机化。
感谢您的帮助!抱歉打扰!
本