gpt4 book ai didi

python - Sklearn gridsearchCV 对象在 pickle 转储/加载后更改

转载 作者:行者123 更新时间:2023-11-28 22:29:31 28 4
gpt4 key购买 nike

我创建了一个 gridsearchCV 对象

grid_search = GridSearchCV(pred_home_pipeline, param_grid)

我想保存整个网格搜索对象,以便稍后探索模型调整结果。我不想只保存 the best_estimator_。但是在转储和重新加载之后,重新加载的和原始的 grid_search 对象在某些方面有所不同,我无法追踪。

# save to disk
with open(filepath, 'wb') as handle:
pickle.dump(grid_search, handle, protocol=pickle.HIGHEST_PROTOCOL)

# reload
with open(filepath, 'rb') as handle:
grid_reloaded = pickle.load(handle)

# test object is unchanged after dump/reload
print(grid_search == grid_reloaded)

False

奇怪。查看 print(grid_search)print(grid_reloaded) 的输出,它们看起来肯定是一样的。

他们为我完全从网格搜索过程中提取的数据创建了完全相同的一组 525 个预测值:

grid_search_preds  = grid_search.predict(X_test)
grid_reloaded_preds= grid_reloaded.predict(X_test)

(grid_search_preds == grid_reloaded_preds).all()

True

...尽管 best_estimator_ 属性在技术上并不相同:

grid_search.best_estimator_ == grid_reloaded.best_estimator_

False

...虽然 best_estimate_ 属性在比较 print(grid_search.best_estimatmator_)print(grid_reloaded.best_estimator_)

时肯定看起来是一样的

这是怎么回事?保存 gridsearchcv 对象以供以后检查是否安全?

最佳答案

那是因为比较返回的是对象是否是同一个对象。

要了解原因,请遵循对象层次结构,您会看到没有 __eq__ 函数被覆盖(或 __cmp__):

因此“==”比较回退到对象内存位置比较,当然您重新加载的实例和当前实例不能相等。这是比较以查看它们是否是同一对象。

查看更多here .

关于python - Sklearn gridsearchCV 对象在 pickle 转储/加载后更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42984226/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com