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

Can*_*anh 4 python-2.7 scikit-learn

我已遵循本指南保存了机器学习模型,以备后用。该模型被丢弃在一台机器中:

from sklearn.externals import joblib
joblib.dump(clf, 'model.pkl')
Run Code Online (Sandbox Code Playgroud)

当我将其加载joblib.load('model.pkl')到另一台计算机上时,我得到了以下警告:

UserWarning:使用0.18.1版本时,尝试释放0.18版之前的估算器DecisionTreeClassifier。这可能会导致代码破裂或无效结果。使用风险自负。

那么,有什么方法可以知道已保存模型的sklearn版本,以将其与当前版本进行比较?

rth*_*rth 6

scikit-learn 0.18中添加了腌制估算器的版本控制。从v0.18开始,您可以获取用于创建估算器的scikit-learn的版本,

estimator.__getstate__()['_sklearn_version']
Run Code Online (Sandbox Code Playgroud)

您收到的警告是由估算员的__setstate__方法产生的,估算员的方法会在提取时自动调用。似乎没有一种直接的方法可以在不从磁盘加载估计器的情况下获得此版本。您可以使用以下方法过滤警告:

import warnings

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

对于0.18之前的版本,没有这种机制,但是我想您可以例如not hasattr(estimator, '__getstate')作为测试来检测至少一个pre-0.18版本。