使用joblib加载模型之前检查sklearn版本

时间:2016-12-14 15:51:08

标签: python-2.7 scikit-learn

我已关注this guide以保存机器学习模型供以后使用。该模型被倾倒在一台机器上:

from sklearn.externals import joblib
joblib.dump(clf, 'model.pkl')

当我将joblib.load('model.pkl')加载到另一台机器上时,我收到了这个警告:

  

UserWarning:尝试从中取消估算DecisionTreeClassifier   使用版本0.18.1时,版本低于0.18。这可能会导致   破坏代码或无效结果。使用风险自负。

那么有没有办法知道保存模型的sklearn版本,以便将其与当前版本进行比较?

2 个答案:

答案 0 :(得分:4)

腌制估算器was added in scikit-learn 0.18的版本控制。从v0.18开始,您可以获得用于创建估算器的scikit-learn版本,

estimator.__getstate__()['_sklearn_version']

您获得的警告由估算器的__setstate__ method生成,该估算器会在取消渲染时自动调用。在没有从磁盘加载估算器的情况下,获得此版本的方法并不简单。您可以使用

过滤掉警告
import warnings

with warnings.catch_warnings():
      warnings.simplefilter("ignore", category=UserWarning)
      estimator = joblib.load('model.pkl')

对于0.18之前的版本,没有这样的机制,但我想你可以使用not hasattr(estimator, '__getstate')作为测试来检测至少pre-0.18个版本。

答案 1 :(得分:-1)

我遇到同样的问题,只需重新训练数据集并再次使用joblib.dump保存'model.pkl'文件。这将得到解决。祝你好运!

相关问题