在python中为随机森林转换pmml文件

时间:2017-05-23 12:31:29

标签: python random-forest pmml

我需要在python中将我的随机森林模型转换为pmml格式。我从github导入了sklearn2pmml并尝试创建一个pmml文件。我运行下面的代码;

import pandas
import sklearn_pandas

iris = iris.csv

iris_df = pandas.concat((pandas.DataFrame(iris.data[:, :], columns = ["Sepal.Length", "sepal_width", "petal_length", "petal_width"]), pandas.DataFrame(iris.target, columns = ["species"])), axis = 1)

iris_mapper = sklearn_pandas.DataFrameMapper([('sepal_length',None),
                                              ('sepal_width', None), 
                                              ('petal_width', None),
                                              ('petal_width', None),
                                              ('species',None)])

iris = iris_mapper.fit_transform(iris_df)

from sklearn.ensemble import RandomForestClassifier

iris_X = iris[:, 0:4]
iris_y = iris[:, 4]

iris_classifier = RandomForestClassifier(n_estimators=10)
iris_classifier.fit(iris_X, iris_y)

from sklearn2pmml import sklearn2pmml

sklearn2pmml(iris_classifier, iris_mapper, "randomforest.pmml")

然而,我收到错误;

TypeError: The pipeline object is not an instance of PMMLPipeline

有什么建议我缺少什么或创建pmml格式的其他方法吗?

2 个答案:

答案 0 :(得分:0)

  

TypeError:管道对象不是PMMLPipeline的实例

sklearn2pmml函数调用的第一个参数必须是sklearn2pmml.PMMLPipeline的实例。您正在传递sklearn.ensemble.RandomForestClassifier的实例。

  

有什么建议我缺少什么或创建pmml格式的其他方法吗?

您正在将史前代码示例与最新版本的sklearn2pmml库配对。这些是你的选择:

  1. 将代码示例升级到最新的sklearn2pmml库版本。请花两分钟时间阅读the "Usage" section of its README.file
  2. 将sklearn2pmml库降级为0.13.0(或更早版本)。

答案 1 :(得分:0)

sklearn2pmml()需要一个PMMLPipeline模型,因此请尝试将iris_classifier打包成PMMLPipeline,如下所示:

import pandas
import sklearn_pandas
from sklearn.datasets import load_iris
from sklearn2pmml.pipeline import PMMLPipeline
from sklearn.ensemble import RandomForestClassifier
d = load_iris()
iris_X = d.data
iris_y = d.target

iris_classifier = RandomForestClassifier(n_estimators=10)
#rfc_model = iris_classifier.fit(iris_X, iris_y)
pipeline_model = PMMLPipeline([('iris_classifier', 
iris_classifier)]).fit(iris_X, iris_y)
from sklearn2pmml import sklearn2pmml
sklearn2pmml(pipeline_model, 'rfc.pmml', with_repr = True)