使用 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 文件中的所有特征名称。
如果我尝试直接在 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 文件中保留特征的名称。
非常感谢!
要点:
- 在管道外实例化分类器
- 实例化 (PMML-) 管道,将此分类器插入其中。
- 将此管道作为一个整体进行安装。
- 打印此分类器的特征重要性,并将此管道导出到 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)
现在我在 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 文件中的所有特征名称。
如果我尝试直接在 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 文件中保留特征的名称。 非常感谢!
要点:
- 在管道外实例化分类器
- 实例化 (PMML-) 管道,将此分类器插入其中。
- 将此管道作为一个整体进行安装。
- 打印此分类器的特征重要性,并将此管道导出到 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)