SkLearn2PMML转换GaussianNB为PMML时输出字段数报错求解决方案
解决SkLearn2PMML转换GaussianNB模型为PMML的问题
错误原因
报错提示GaussianNB未指定输出数量,本质是PMMLPipeline无法自动识别分类任务的目标类别信息,需要显式配置目标字段相关参数。
解决方案
提供两种可行修复方式:
方法1:显式设置PMMLPipeline的目标字段参数
在训练模型后,直接给Pipeline指定目标字段名称和对应类别值:
from sklearn.datasets import load_breast_cancer from sklearn.model_selection import train_test_split from sklearn.naive_bayes import GaussianNB from sklearn2pmml import PMMLPipeline, sklearn2pmml # 加载并拆分数据集 data = load_breast_cancer() label_names = data['target_names'] labels = data['target'] feature_names = data['feature_names'] features = data['data'] train, test, train_labels, test_labels = train_test_split(features, labels, test_size=0.33, random_state=42) # 创建PMMLPipeline nb_pipeline = PMMLPipeline([ ('classifier', GaussianNB()) ]) # 显式指定目标字段名称和类别取值 nb_pipeline.target_fields = ['diagnosis'] nb_pipeline.target_values = label_names.tolist() # 训练模型 nb_pipeline.fit(train, train_labels) # 导出为PMML文件 sklearn2pmml(nb_pipeline, 'nb.pmml', with_repr=True, debug=True)
方法2:用LabelEncoder包装目标变量
通过sklearn2pmml.decoration.LabelEncoder明确标记目标变量的类别信息,帮助Pipeline识别输出定义:
from sklearn.datasets import load_breast_cancer from sklearn.model_selection import train_test_split from sklearn.naive_bayes import GaussianNB from sklearn2pmml import PMMLPipeline, sklearn2pmml from sklearn2pmml.decoration import LabelEncoder # 加载并拆分数据集 data = load_breast_cancer() label_names = data['target_names'] labels = data['target'] feature_names = data['feature_names'] features = data['data'] train, test, train_labels, test_labels = train_test_split(features, labels, test_size=0.33, random_state=42) # 创建Pipeline并添加LabelEncoder处理目标 nb_pipeline = PMMLPipeline([ ('classifier', GaussianNB()), ('encoder', LabelEncoder(target_field='diagnosis', target_values=label_names.tolist())) ]) # 训练模型 nb_pipeline.fit(train, train_labels) # 导出为PMML文件 sklearn2pmml(nb_pipeline, 'nb.pmml', with_repr=True, debug=True)
说明
两种方案核心都是让PMMLPipeline明确知晓分类任务的目标字段名称和对应类别取值,从而生成包含完整输出定义的合法PMML文件,均可解决does not specify the number of outputs的报错。
内容的提问来源于stack exchange,提问作者lucaqian
相关产品推荐
相关产品推荐

