【问题标题】:PMML sklearn2pmml error in python2.7python2.7中的PMML sklearn2pmml错误
【发布时间】:2017-06-01 14:50:50
【问题描述】:

我有一个随机森林模型,我正在尝试将其转换为 pmml。我可以正确拟合模型,因为它不会引发任何错误:

test_pipeline = PMMLPipeline([("rforest", RandomForestClassifier())])
test_pipeline.fit(trainX, trainY)

CPU times: user 1.18 s, sys: 61.6 ms, total: 1.24 s
Wall time: 1.25 s

但是,当我尝试调用 sklearn2pmml 方法时出现错误:

sklearn2pmml(test_pipeline, "DecisionTreeIris.pmml", with_repr = True)

错误:

---------------------------------------------------------------------------
CalledProcessError                        Traceback (most recent call last)
<ipython-input-38-9f07cfed11da> in <module>()
----> 1 sklearn2pmml(test_pipeline, "DecisionTreeIris.pmml", with_repr = True)

/Users/dileeppatchigolla/.local/lib/python2.7/site-packages/sklearn2pmml/__init__.pyc in sklearn2pmml(pipeline, pmml, user_classpath, with_repr, debug)
     89                 if(debug):
     90                         print(" ".join(cmd))
---> 91                 subprocess.check_call(cmd)
     92         finally:
     93                 if(debug):

/Users/dileeppatchigolla/anaconda/lib/python2.7/subprocess.pyc in check_call(*popenargs, **kwargs)
    539         if cmd is None:
    540             cmd = popenargs[0]
--> 541         raise CalledProcessError(retcode, cmd)
    542     return 0
    543 

CalledProcessError: Command '['java', '-cp', '/Users/dileeppatchigolla/.local/lib/python2.7/site-packages/sklearn2pmml/resources/guava-19.0.jar:/Users/dileeppatchigolla/.local/lib/python2.7/site-packages/sklearn2pmml/resources/istack-commons-runtime-2.21.jar:/Users/dileeppatchigolla/.local/lib/python2.7/site-packages/sklearn2pmml/resources/jaxb-core-2.2.11.jar:/Users/dileeppatchigolla/.local/lib/python2.7/site-packages/sklearn2pmml/resources/jaxb-runtime-2.2.11.jar:/Users/dileeppatchigolla/.local/lib/python2.7/site-packages/sklearn2pmml/resources/jcommander-1.48.jar:/Users/dileeppatchigolla/.local/lib/python2.7/site-packages/sklearn2pmml/resources/jpmml-converter-1.2.0.jar:/Users/dileeppatchigolla/.local/lib/python2.7/site-packages/sklearn2pmml/resources/jpmml-lightgbm-1.0.0.jar:/Users/dileeppatchigolla/.local/lib/python2.7/site-packages/sklearn2pmml/resources/jpmml-sklearn-1.2.3.jar:/Users/dileeppatchigolla/.local/lib/python2.7/site-packages/sklearn2pmml/resources/jpmml-xgboost-1.1.4.jar:/Users/dileeppatchigolla/.local/lib/python2.7/site-packages/sklearn2pmml/resources/pmml-agent-1.3.4.jar:/Users/dileeppatchigolla/.local/lib/python2.7/site-packages/sklearn2pmml/resources/pmml-model-1.3.4.jar:/Users/dileeppatchigolla/.local/lib/python2.7/site-packages/sklearn2pmml/resources/pmml-model-metro-1.3.4.jar:/Users/dileeppatchigolla/.local/lib/python2.7/site-packages/sklearn2pmml/resources/pmml-schema-1.3.4.jar:/Users/dileeppatchigolla/.local/lib/python2.7/site-packages/sklearn2pmml/resources/pyrolite-4.15.jar:/Users/dileeppatchigolla/.local/lib/python2.7/site-packages/sklearn2pmml/resources/serpent-1.16.jar:/Users/dileeppatchigolla/.local/lib/python2.7/site-packages/sklearn2pmml/resources/slf4j-api-1.7.22.jar:/Users/dileeppatchigolla/.local/lib/python2.7/site-packages/sklearn2pmml/resources/slf4j-jdk14-1.7.22.jar', 'org.jpmml.sklearn.Main', '--pkl-pipeline-input', '/var/folders/1j/5zzgmlk16ql5mm9z6_3n0c840000gp/T/pipeline-G164OK.pkl.z', '--repr-pipeline', "PMMLPipeline(steps=[('rforest', RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',\n            max_depth=None, max_features='auto', max_leaf_nodes=None,\n            min_samples_leaf=1, min_samples_split=2,\n            min_weight_fraction_leaf=0.0, n_estimators=10, n_jobs=1,\n            oob_score=False, random_state=None, verbose=0,\n            warm_start=False))])", '--pmml-output', 'DecisionTreeIris.pmml']' returned non-zero exit status 1

有人可以帮我调试错误日志并提供解决方案吗?

【问题讨论】:

  • 随着我们继续解决问题,原始问题从未得到解决。几个月后我再次遇到这个问题,这次找到了原因 - 我的Mac中的jdk是1.6版本,而sklearn2pmml的最低要求是1.7;我已经更新了 jdk,问题已解决。

标签: python python-2.7 pmml


【解决方案1】:

您似乎正在从 IPython 笔记本中访问 sklearn2pmml 功能。该函数执行一个 Java 进程(从错误报告的最后一行可以看出),并检查该 Java 进程返回退出代码 0(成功)还是 -1(失败)。

返回退出代码 -1 的最可能原因是引发了某种 Java 异常。 Java 进程将此类异常的完整堆栈跟踪打印到其“标准”输出流。显然,IPython notebook 不知道如何捕获和传输它——您只看到 Python 的“前端”异常,而不是 Java 的“后端”异常。

您的错误报告不包含任何可操作的信息(并且不是可重现的示例)。请检查您的 IPython 笔记本的原始日志,看看 Java“后端”异常到底是什么。如果直接从命令行执行 Python 脚本会发生什么?

【讨论】:

  • 是的,我正在使用 IPython 笔记本。但是当我从命令行尝试时也遇到了同样的错误。
  • 相关 Java 异常的堆栈跟踪是什么?
  • 我不知道在哪里可以找到它。你能帮我拿它吗?
  • 只需从命令行执行您的 Python 脚本,并将其“标准”输出和错误流捕获到某个文件:python script.py &gt; log.txt 2&gt;&amp;1
  • 随着我们继续解决问题,原始问题从未得到解决。几个月后我再次遇到这个问题,这次找到了原因 - 我的Mac中的jdk是1.6版本,而sklearn2pmml的最低要求是1.7;我已经更新了 jdk,问题已解决。
猜你喜欢
  • 2018-02-25
  • 2020-06-05
  • 2019-04-29
  • 2016-03-08
  • 2012-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多