Python 如何在使用sklearn2pmml时获得特征的重要性

Python 如何在使用sklearn2pmml时获得特征的重要性,python,pmml,Python,Pmml,现在,我在python sklearn中训练了一个名为“GB”的gbdt模型。我想把这个经过训练的模型导出到pmml文件中。但我遇到了这个问题: 1.如果我尝试将经过训练的“GB”模型放入PMML管道,并使用sklearn2pmml导出模型。如下图所示: GB = GradientBoostingClassifier(n_estimators=100,learning_rate=0.05) GB.fit(train[list(x_features),Train['Target']]) GB_pi

现在,我在python sklearn中训练了一个名为“GB”的gbdt模型。我想把这个经过训练的模型导出到pmml文件中。但我遇到了这个问题: 1.如果我尝试将经过训练的“GB”模型放入PMML管道,并使用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_
警告“未设置“活动字段”属性”。我将丢失导出的pmml文件中所有功能的名称

如果我尝试直接在PMML管道中训练模型。由于GB_管道中没有features_importances_属性,因此我无法观察此模型的features_重要性。如下图所示:

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_
GB_pipeline=PMMLPipeline[分类器,梯度增强分类器n_估计器=100,学习率=0.05] PMMLPipeline.fittrain[listx_特性,训练['Target']] sklearn2pmml.sklearn2pmmlGB_管道,pmml='GB.pmml'

我该怎么做才能既能观察到模型的特征和重要性,又能在导出的pmml文件中保留特征的名称。 多谢各位

要点:

在管道外部实例化分类器 实例化PMML-pipeline,将这个分类器插入其中。 将此管道作为一个整体安装。 打印此分类器的特征重要性,并将此管道导出到PMML文档中。 在您的第一个代码示例中,您正在拟合分类器,但您应该将管道作为一个整体进行拟合-因此警告管道的内部状态不完整。在第二个代码示例中,您没有对分类器的直接引用,但是,您可以通过解析管道的最后一步来获得它

基于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)

它起作用了!!!!!!!!!!!!!!非常感谢。我认为根本原因是我不明白管道是什么。非常感谢你!