使用 sklearn2pmml 时如何获取 feature_importance

How to Get feature_importance when using sklearn2pmml

现在我在 python sklearn 中训练了一个名为 'GB' 的 gbdt 模型。我想将这个经过训练的模型导出到 pmml 文件中。但是我遇到了这个问题: 1. 如果我尝试将经过训练的 'GB' 模型放入 PMMLpipeline 并使用 sklearn2pmml 导出模型。如下所示:

GB = GradientBoostingClassifier(n_estimators=100,learning_rate=0.05)
GB.fit(train[list(x_features),Train['Target']])
GB_pipeline = PMMLPipeline([("classifier",GB)])
sklearn2pmml.sklearn2pmml(GB_pipeline,pmml='GB.pmml')
importance=gb.feature_importances_

出现警告“'active_fields' 属性未设置”。我将丢失导出的 pmml 文件中的所有特征名称。

  1. 如果我尝试直接在 PMMLPipeline 中训练模型。由于 GB_pipeline 中没有 feature_importances_ 属性,我无法观察到该模型的 features_importance。如下所示:

    GB_pipeline = PMMLPipeline([("classifier",GradientBoostingClassifier(n_estimators=100,learning_rate=0.05))]) PMMLPipeline.fit(火车[列表(x_features),火车['Target']]) sklearn2pmml.sklearn2pmml(GB_pipeline,pmml='GB.pmml')

我该怎么做才能既观察模型的 features_importance 又能在导出的 pmml 文件中保留特征的名称。 非常感谢!

要点:

  1. 在管道外实例化分类器
  2. 实例化 (PMML-) 管道,将此分类器插入其中。
  3. 将此管道作为一个整体进行安装。
  4. 打印此分类器的特征重要性,并将此管道导出到 PMML 文档中。

在您的第一个代码示例中,您正在拟合分类器,但您应该将管道作为一个整体来拟合 - 因此警告管道的内部状态不完整。在您的第二个代码示例中,您没有对分类器的直接引用(但是,您可以通过 "parsing" 安装管道的最后一步获得它)。

基于 Iris 数据集的完整示例:

import pandas
iris_df = pandas.read_csv("Iris.csv")

from sklearn.ensemble import GradientBoostingClassifier
from sklearn2pmml import sklearn2pmml, PMMLPipeline
gbt = GradientBoostingClassifier()
pipeline = PMMLPipeline([
    ("classifier", gbt)
])
pipeline.fit(iris_df[iris_df.columns.difference(["Species"])], iris_df["Species"])
print (gbt.feature_importances_)
sklearn2pmml(pipeline, "GBTIris.pmml", with_repr = True)