NN 模型输出一个类别进行二元分类

Posted

技术标签:

【中文标题】NN 模型输出一个类别进行二元分类【英文标题】:NN model ouputs one category for binary classification 【发布时间】:2020-03-12 17:57:29 【问题描述】:

我的数据集包含标签为 0 和 1,其中包含 100 个示例,每个示例的特征维度为 39。有 50 个示例属于 1 类,其余 50 个属于 0 类。图形输出仅显示一个输出而不是两个。因为有两个类别,所以应该有两个输出节点。我很惊讶为什么会这样。以下是代码。非常感谢您的帮助。

hiddenlayersize = 5;
net = patternnet(hiddenlayersize);
net = init(net);
netperformFcn = 'crossentropy';
[net] = train(net,x,t);
out = sim(net,x);

下面是模型:

另外,out 不是二进制的。如何获得二进制的预测标签?

【问题讨论】:

【参考方案1】:

分类以概率的形式输出结果——你的结果很好。 默认阈值为 0.5,用于将概率转换为 2 个类别,例如 0 和 1。 您可以微调阈值 - 通过上下移动并进一步分析结果,如误报、误报、精确召回曲线等,具体取决于目标是什么。

希望这会有所帮助。

【讨论】:

感谢您的回答,但不清楚为什么图片中只有一个输出节点而不是 2 个用于二进制分类。图片是错误的,所以模型,我猜。您能否回答我哪里出错以及如何将输出概率更改为 0/1 类标签。 图和模型都正确。取文件中的输出概率,比如 excel 并将 > 0.5 标记为 "1" ,其余为 0。这是将概率转换为二进制值的默认阈值。然后通过改变不同的阈值水平来分析误差。例如 - 在 0.5 阈值之后 - 您可以尝试 0.4 并查看损失是减少还是增加。 您能否解释一下为什么说应该有 1 个输出节点而不是 2 个输出节点,因为有两个类标签,但它不是 1 就是 0。 因为 NN 输出的是分类问题的概率,而不是离散值(这里是 0 和 1),所以它是工作和决策 - 我们如何使用阈值标准将这些概率映射到 0 和 1 . 非常感谢!如果您能查看我在这里提出的关于使用 MLP 的类不平衡问题的另一个问题,我将不胜感激 ***.com/questions/58894816/…

以上是关于NN 模型输出一个类别进行二元分类的主要内容,如果未能解决你的问题,请参考以下文章

NN 和 CNN 的输出(最后一层)有区别吗?

感知机算法(Perceptron Learning Algorithm)

组合两个预训练模型的输出(在不同数据集上训练)并使用某种形式的二元分类器来预测图像

sklearn 使用 prob_a 进行逻辑二元分类

使用 keras ResNet50 模型进行二进制分类的输出层

k近邻算法(k-nearest neighbor,k-NN)