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

基于imageCategoryClassifier的MATLAB概率图像分类问题咨询

解决imageCategoryClassifier预测中的两个核心问题

我来帮你搞定这两个在Matlab图像分类预测中常见的问题,直接上实用的方案和代码:

问题1:将负平均二元损失转换为[0,1]区间的概率

你说得没错,predict返回的score是每类的负平均二元损失,数值为负,确实不是我们熟悉的概率值。这里有两种常用的转换方式,根据你的需求选择:

方式1:Sigmoid转换(适用于类独立的二分类场景)

如果你的三类是各自独立的判定(比如“猫/非猫”“狗/非狗”“鸟/非鸟”),可以用Sigmoid函数把每个类的score单独转换成[0,1]的概率,每个类的概率互不影响:

% 假设已经得到预测标签和score
[predictedLabels, scores] = predict(yourClassifier, testImageSet);

% Sigmoid转换:将每个score映射到[0,1]
probabilities = 1 ./ (1 + exp(-scores));

这里的逻辑是:score值越大(越接近0甚至正数),对应的概率越高,符合“负损失越小,分类置信度越高”的逻辑。

方式2:Softmax转换(适用于多类互斥场景)

如果你的三类是互斥的(一张图只能属于其中一类),用Softmax可以把所有类的score归一化,得到和为1的概率分布,更符合多分类的概率直觉:

% Softmax转换:归一化得到每类的概率,所有类概率和为1
expScores = exp(scores);
probabilities = expScores ./ sum(expScores, 2);

比如某张图的score是[-1.2, -0.5, -3.1],转换后概率就是[0.30, 0.62, 0.08],能直观看到每类的置信占比。

问题2:识别无法归入训练类别的新增类别

你的思路完全正确——通过概率阈值来判断样本是否属于训练过的三类,超出阈值就标记为未知/新增类别。具体实现步骤如下:

  1. 先把score转换成概率(用上面的任意一种方式,推荐Softmax,因为能得到归一化的置信度)
  2. 设置一个合理的置信度阈值(比如0.7,可根据验证集调整)
  3. 对每个样本,判断其最高概率是否低于阈值,若是则标记为新增类别

示例代码:

% 先得到Softmax归一化后的概率
expScores = exp(scores);
probabilities = expScores ./ sum(expScores, 2);

% 获取每个样本的最高概率和对应的类别索引
[maxConfidence, ~] = max(probabilities, [], 2);

% 设置置信度阈值,比如0.7(建议用验证集调优,平衡准确率和召回率)
confidenceThreshold = 0.7;

% 初始化最终标签为predict的结果
finalLabels = predictedLabels;

% 找到置信度低于阈值的样本,标记为新增类别(比如'Unknown'或你需要的标签)
unknownSamplesIdx = maxConfidence < confidenceThreshold;
finalLabels(unknownSamplesIdx) = repmat({'Unknown'}, sum(unknownSamplesIdx), 1);

额外建议:阈值调优

不要随便固定阈值,最好用带标注的验证集(包含训练类和新增类)来调整:比如尝试不同的阈值,找到能让“训练类分类准确率”和“新增类识别率”平衡的取值。如果没有标注的新增类数据,也可以参考训练集上的分类置信度分布来设置(比如取训练集正确分类样本的最低置信度作为阈值)。

内容的提问来源于stack exchange,提问作者hanalc

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:02:12