【问题标题】:Predict if probability is higher than certain value预测概率是否高于某个值
【发布时间】:2021-04-29 03:41:33
【问题描述】:

我正在使用 MLP 模型进行分类。

当我对新数据进行预测时,我只想保留那些预测概率大于 0.5 的预测,并将所有其他预测更改为 0 类。

如何在 keras 中做到这一点?

我正在使用最后一层如下 model.add(layers.Dense(7 , activation='softmax'))

使用softmax得到概率大于0.5的预测有意义吗?

newdata = (nsamples, nfeatures)
predictions = model.predict (newdata)
print (predictions.shape)
(500, 7)

【问题讨论】:

    标签: tensorflow keras deep-learning neural-network


    【解决方案1】:

    你可以这样做:

    preds=model.predict etc
    index=np.argmax(preds)
    probability= preds(index)
    if probability >=.75:
        print (' class is ', index,' with high confidence')
    elif probability >=.5:
        print (' class is ', index,' with medium confidence')
    else:
        print (' class is ', index,' with low confidence')
    

    【讨论】:

      【解决方案2】:

      Softmax 函数输出概率。因此,在您的情况下,您将有 7 个类,它们的概率总和将等于 1。

      现在考虑一个案例[0.1, 0.1, 0.1, 0.1, 0.1, 0.2, 0.3],它是 softmax 的输出。如您所见,在这种情况下应用阈值是没有意义的。

      阈值 0.5 与 n 分类预测无关。这是二进制分类的特殊之处。

      要获取类,您应该使用 argmax。

      编辑:如果您想在预测低于某个阈值时放弃预测,您可以使用,但这不是处理多类预测的正确方法

      labels = []
      threshold = 0.5
      
      for probs_thresholded in out:
         labels.append([])
         
         for i in range(len(probs_thresholded)):
            if probs_thresholded[i] >= threshold:
               labels[-1].append(1)
            else:
               labels[-1].append(0)
      

      【讨论】:

      • 这意味着,由于最大概率为 0.3,预测将是类 7 对吗?
      • 没错。使用 argmax 您返回最大值的索引。
      • 那么,我们可以说标签7的预测概率是0.3。由于小于0.5,我们将其转换为0 ?
      • 将其转换为 0 没有任何意义。如果将其转换为 0,您将失去预测。正如我所说的使用 softmax 的 n 类预测,获取类和预测不涉及阈值。
      • 由于它可能导致虚假信息,我避免显示它,您可以简单地使用列表理解来掩盖您的预测数组。
      猜你喜欢
      • 2016-05-23
      • 2022-01-14
      • 1970-01-01
      • 1970-01-01
      • 2022-08-19
      • 1970-01-01
      • 2019-09-16
      • 2017-01-07
      相关资源
      最近更新 更多