【发布时间】:2017-12-17 03:15:31
【问题描述】:
我构建了一个 scikit-learn 模型,我想在日常的 python cron 作业中重复使用(注意:不涉及其他平台 - 没有 R,没有 Java 等)。
我 pickled 它(实际上,我腌制了我自己的对象,其一个字段是 GradientBoostingClassifier),然后我在 cron 作业中取消腌制它。到目前为止一切顺利(已经在Save classifier to disk in scikit-learn 和Model persistence in Scikit-Learn? 中讨论过)。
但是,我升级了 sklearn,现在收到以下警告:
.../.local/lib/python2.7/site-packages/sklearn/base.py:315:
UserWarning: Trying to unpickle estimator DecisionTreeRegressor from version 0.18.1 when using version 0.18.2. This might lead to breaking code or invalid results. Use at your own risk.
UserWarning)
.../.local/lib/python2.7/site-packages/sklearn/base.py:315:
UserWarning: Trying to unpickle estimator PriorProbabilityEstimator from version 0.18.1 when using version 0.18.2. This might lead to breaking code or invalid results. Use at your own risk.
UserWarning)
.../.local/lib/python2.7/site-packages/sklearn/base.py:315:
UserWarning: Trying to unpickle estimator GradientBoostingClassifier from version 0.18.1 when using version 0.18.2. This might lead to breaking code or invalid results. Use at your own risk.
UserWarning)
我现在该怎么办?
我可以降级到 0.18.1 并坚持使用它,直到我准备好重建模型。由于各种原因,我认为这是不可接受的。
我可以取消腌制文件并再次重新腌制。这适用于 0.18.2,但 与 0.19 中断。 NFG。
joblib看起来也好不到哪里去。我希望我可以将数据保存为与版本无关的 ASCII 格式(例如 JSON 或 XML)。显然,这是最佳解决方案,但似乎没有方法可以做到这一点(另请参阅Sklearn - model persistence without pkl file)。
我可以将模型保存到PMML,但它的支持充其量是不冷不热的: 我可以使用
sklearn2pmml来保存模型(虽然不容易),并使用augustus/lightpmmlpredictor来应用(虽然不是加载)模型。但是,pip无法直接使用这些,这使得部署成为一场噩梦。此外,augustus和lightpmmlpredictor项目似乎已经死了。 Importing PMML models into Python (Scikit-learn) - 不。上述变体:使用
sklearn2pmml保存PMML,并使用openscoring进行评分。需要与外部进程交互。呵呵。
建议?
【问题讨论】:
标签: python python-2.7 scikit-learn pmml