私は、python scikit-learnモデルをPMMLにエクスポートしたいと思います。エクスポートpython scikitモデルをpmmlに学習
どのようなpythonパッケージが最適ですか?
私は約Augustusを読んでいましたが、scikit-learnモデルを使用している例は見つかりませんでした。
私は、python scikit-learnモデルをPMMLにエクスポートしたいと思います。エクスポートpython scikitモデルをpmmlに学習
どのようなpythonパッケージが最適ですか?
私は約Augustusを読んでいましたが、scikit-learnモデルを使用している例は見つかりませんでした。
JPMML-SkLearnコマンドラインアプリケーションの周りに薄いラッパーです。サポートされているScikit-Learn EstimatorとTransformerの種類については、JPMML-SkLearnプロジェクトのドキュメントを参照してください。
@ user1808924は、Python 2.7または3.4+をサポートしています。また、Java 1.7以降
を介してインストールが必要です:PMMLに分類器ツリーをエクスポートする方法の
pip install git+https://github.com/jpmml/sklearn2pmml.git
例(gitが必要です)。まず木を育てる:
# example tree & viz from http://scikit-learn.org/stable/modules/tree.html
from sklearn import datasets, tree
iris = datasets.load_iris()
clf = tree.DecisionTreeClassifier()
clf = clf.fit(iris.data, iris.target)
SkLearn2PMML変換、推定(当社clf
)と(例えば離散化やPCAなどの前処理工程のために)マッパーには2つの部分があります。私たちのマッパーは、基本的なものではありません。
from sklearn_pandas import DataFrameMapper
default_mapper = DataFrameMapper([(i, None) for i in iris.feature_names + ['Species']])
from sklearn2pmml import sklearn2pmml
sklearn2pmml(estimator=clf,
mapper=default_mapper,
pmml="D:/workspace/IrisClassificationTree.pmml")
それはmapper=None
を渡すために(文書化されていませんが)可能ですが、あなたは、予測名が(x1
ないsepal length
などを返す)迷子いることがわかります。
のは.pmml
ファイルを見てみましょう:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<PMML xmlns="http://www.dmg.org/PMML-4_3" version="4.3">
<Header>
<Application name="JPMML-SkLearn" version="1.1.1"/>
<Timestamp>2016-09-26T19:21:43Z</Timestamp>
</Header>
<DataDictionary>
<DataField name="sepal length (cm)" optype="continuous" dataType="float"/>
<DataField name="sepal width (cm)" optype="continuous" dataType="float"/>
<DataField name="petal length (cm)" optype="continuous" dataType="float"/>
<DataField name="petal width (cm)" optype="continuous" dataType="float"/>
<DataField name="Species" optype="categorical" dataType="string">
<Value value="setosa"/>
<Value value="versicolor"/>
<Value value="virginica"/>
</DataField>
</DataDictionary>
<TreeModel functionName="classification" splitCharacteristic="binarySplit">
<MiningSchema>
<MiningField name="Species" usageType="target"/>
<MiningField name="sepal length (cm)"/>
<MiningField name="sepal width (cm)"/>
<MiningField name="petal length (cm)"/>
<MiningField name="petal width (cm)"/>
</MiningSchema>
<Output>
<OutputField name="probability_setosa" dataType="double" feature="probability" value="setosa"/>
<OutputField name="probability_versicolor" dataType="double" feature="probability" value="versicolor"/>
<OutputField name="probability_virginica" dataType="double" feature="probability" value="virginica"/>
</Output>
<Node id="1">
<True/>
<Node id="2" score="setosa" recordCount="50.0">
<SimplePredicate field="petal width (cm)" operator="lessOrEqual" value="0.8"/>
<ScoreDistribution value="setosa" recordCount="50.0"/>
<ScoreDistribution value="versicolor" recordCount="0.0"/>
<ScoreDistribution value="virginica" recordCount="0.0"/>
</Node>
<Node id="3">
<SimplePredicate field="petal width (cm)" operator="greaterThan" value="0.8"/>
<Node id="4">
<SimplePredicate field="petal width (cm)" operator="lessOrEqual" value="1.75"/>
<Node id="5">
<SimplePredicate field="petal length (cm)" operator="lessOrEqual" value="4.95"/>
<Node id="6" score="versicolor" recordCount="47.0">
<SimplePredicate field="petal width (cm)" operator="lessOrEqual" value="1.6500001"/>
<ScoreDistribution value="setosa" recordCount="0.0"/>
<ScoreDistribution value="versicolor" recordCount="47.0"/>
<ScoreDistribution value="virginica" recordCount="0.0"/>
</Node>
<Node id="7" score="virginica" recordCount="1.0">
<SimplePredicate field="petal width (cm)" operator="greaterThan" value="1.6500001"/>
<ScoreDistribution value="setosa" recordCount="0.0"/>
<ScoreDistribution value="versicolor" recordCount="0.0"/>
<ScoreDistribution value="virginica" recordCount="1.0"/>
</Node>
</Node>
<Node id="8">
<SimplePredicate field="petal length (cm)" operator="greaterThan" value="4.95"/>
<Node id="9" score="virginica" recordCount="3.0">
<SimplePredicate field="petal width (cm)" operator="lessOrEqual" value="1.55"/>
<ScoreDistribution value="setosa" recordCount="0.0"/>
<ScoreDistribution value="versicolor" recordCount="0.0"/>
<ScoreDistribution value="virginica" recordCount="3.0"/>
</Node>
<Node id="10">
<SimplePredicate field="petal width (cm)" operator="greaterThan" value="1.55"/>
<Node id="11" score="versicolor" recordCount="2.0">
<SimplePredicate field="sepal length (cm)" operator="lessOrEqual" value="6.95"/>
<ScoreDistribution value="setosa" recordCount="0.0"/>
<ScoreDistribution value="versicolor" recordCount="2.0"/>
<ScoreDistribution value="virginica" recordCount="0.0"/>
</Node>
<Node id="12" score="virginica" recordCount="1.0">
<SimplePredicate field="sepal length (cm)" operator="greaterThan" value="6.95"/>
<ScoreDistribution value="setosa" recordCount="0.0"/>
<ScoreDistribution value="versicolor" recordCount="0.0"/>
<ScoreDistribution value="virginica" recordCount="1.0"/>
</Node>
</Node>
</Node>
</Node>
<Node id="13">
<SimplePredicate field="petal width (cm)" operator="greaterThan" value="1.75"/>
<Node id="14">
<SimplePredicate field="petal length (cm)" operator="lessOrEqual" value="4.8500004"/>
<Node id="15" score="virginica" recordCount="2.0">
<SimplePredicate field="sepal width (cm)" operator="lessOrEqual" value="3.1"/>
<ScoreDistribution value="setosa" recordCount="0.0"/>
<ScoreDistribution value="versicolor" recordCount="0.0"/>
<ScoreDistribution value="virginica" recordCount="2.0"/>
</Node>
<Node id="16" score="versicolor" recordCount="1.0">
<SimplePredicate field="sepal width (cm)" operator="greaterThan" value="3.1"/>
<ScoreDistribution value="setosa" recordCount="0.0"/>
<ScoreDistribution value="versicolor" recordCount="1.0"/>
<ScoreDistribution value="virginica" recordCount="0.0"/>
</Node>
</Node>
<Node id="17" score="virginica" recordCount="43.0">
<SimplePredicate field="petal length (cm)" operator="greaterThan" value="4.8500004"/>
<ScoreDistribution value="setosa" recordCount="0.0"/>
<ScoreDistribution value="versicolor" recordCount="0.0"/>
<ScoreDistribution value="virginica" recordCount="43.0"/>
</Node>
</Node>
</Node>
</Node>
</TreeModel>
</PMML>
最初のスプリット(ノード1)は0.8で、花びらの幅です。ノード2(花びらの幅< = 0.8)は、他に何もセットオザをすべて捕捉します。あなたは[sklearn2pmml]を使用してPMMLにモデルや変圧器をScikit・ラーン変換することができます
from sklearn.externals.six import StringIO
import pydotplus # this might be pydot for python 2.7
dot_data = StringIO()
tree.export_graphviz(clf,
out_file=dot_data,
feature_names=iris.feature_names,
class_names=iris.target_names,
filled=True, rounded=True,
special_characters=True)
graph = pydotplus.graph_from_dot_data(dot_data.getvalue())
graph.write_pdf("D:/workspace/iris.pdf")
# for in-line display, you can also do:
# from IPython.display import Image
# Image(graph.create_png())
マッパーを使用しないときにプレディクタ名を保持する方法はありますか?私は本当に評価者の側でそれらを知る必要がありますが、これのためだけにマッパーを構築することは、あまりにも多くの過剰なものです。 – KidCrippler
@Kマッパーなしでプレディクタ名を保存する方法を理解できませんでした。あなたは質問を投稿しようとすることができます。 – C8H10N4O2
答えは廃止されたようです: 'sklearn2pmml'は' PMMLPipeline'を使用するようになりました。 – sds
(https://github.com:
あなたは
graphviz
出力にPMML出力を比較することができます/ jpmml/sklearn2pmml)パッケージ。 – user1808924JPMML-SkLearnもPython 2.7をサポートしていますが、現時点では宣伝されていません。 – user1808924
jpmml-sklearnパッケージは、Python 3.4からサポートしています。 Python 2.7をサポートする代替手段がありますか – Selva