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

TensorFlow JS单类KNN分类器如何获取准确率及实现有效分类

单类别图像分类(区分已知/未知)的实现方案

针对你用TensorFlow JS KNN分类器单类别训练时置信度恒为1的问题,这里提供几个实用解决思路:

1. 补充"未知类"负样本,适配KNN多类逻辑

KNN的置信度计算依赖多类样本的对比,单类别场景下无法区分匹配度差异。你可以:

  • 收集一批不属于目标类的图像(比如随机风景、其他物体),标记为"unknown"类别;
  • 训练时同时喂入目标类(如"target")和"unknown"类的样本;
  • 推理时,若"target"类的置信度远高于"unknown"(比如差值超过0.6,或"target"置信度>0.8),则判定为已知类,否则归为未知。

2. 基于特征相似度阈值做判断(绕开KNN多类限制)

直接用预训练模型提取图像特征,通过对比特征相似度来区分已知/未知:

  • 用mobilenet.load()加载预训练特征提取模型,去掉顶层分类层;
  • 训练阶段:提取所有目标类样本的特征,计算平均特征向量;
  • 推理阶段:提取输入图像的特征,和平均特征计算余弦相似度(或欧氏距离):
    // 计算余弦相似度
    function cosineSimilarity(vecA, vecB) {
      const dot = tf.sum(tf.multiply(vecA, vecB));
      const normA = tf.norm(vecA);
      const normB = tf.norm(vecB);
      return dot.div(normA.multiply(normB)).dataSync()[0];
    }
    
  • 设定阈值(如相似度>0.75),超过则判定为已知类,否则为未知。

3. 自定义KNN的置信度计算逻辑

如果一定要用KNN分类器,修改其输出逻辑,基于目标类的匹配准确率判断:

  • 训练时仍用单类别,但推理时,获取输入样本与KNN中所有目标类训练样本的相似度;
  • 计算这些相似度的平均值,或统计相似度超过某阈值的样本占比;
  • 用这个统计值作为"匹配准确率",而非KNN默认的单类置信度,再设定阈值区分已知/未知。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 14:31:52