如何让sklearn2pmml导出的PMML文件保留原始字段名?
解决PMML导出保留原始字段名的问题
问题出在你单独拟合StandardScaler后再放入Pipeline,导致模型未关联原始特征名称;同时嵌套使用PMMLPipeline和make_pmml_pipeline也干扰了特征名的传递。
以下是两种可行的修改方案:
方案一:直接用PMMLPipeline拟合带列名的DataFrame
把StandardScaler放入PMMLPipeline后,直接用包含原始字段名的DataFrame拟合整个Pipeline,sklearn2pmml会自动提取DataFrame的列名作为PMML的字段名:
from sklearn2pmml import sklearn2pmml, PMMLPipeline from sklearn.datasets import load_iris from sklearn.preprocessing import StandardScaler import pandas as pd data = load_iris() dfIris = pd.DataFrame(data=data.data, columns=data.feature_names) # 构建PMMLPipeline并直接拟合DataFrame pipe = PMMLPipeline([("StandardScaler", StandardScaler())]) pipe.fit(dfIris) sklearn2pmml(pipeline=pipe, pmml="ssIris.pmml")
方案二:显式为PMMLPipeline指定特征名称
如果需要保留先单独拟合模型的流程,可以通过给PMMLPipeline设置feature_names参数,直接传入原始字段名列表:
from sklearn2pmml import sklearn2pmml, PMMLPipeline from sklearn.datasets import load_iris from sklearn.preprocessing import StandardScaler import pandas as pd data = load_iris() dfIris = pd.DataFrame(data=data.data, columns=data.feature_names) ssModel = StandardScaler() ssModel.fit(dfIris) # 构建Pipeline并显式设置特征名 pipe = PMMLPipeline([("StandardScaler", ssModel)]) pipe.feature_names = data.feature_names sklearn2pmml(pipeline=pipe, pmml="ssIris.pmml")
修改后导出的PMML文件会显示sepal length (cm)等原始字段名,而非x1、x2这类默认命名。
内容的提问来源于stack exchange,提问作者dba
相关产品推荐
相关产品推荐

