You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 08:50:36