Tensorflow 预测概率是否高于某个值

Tensorflow 预测概率是否高于某个值,tensorflow,keras,deep-learning,neural-network,Tensorflow,Keras,Deep Learning,Neural Network,我使用MLP模型进行分类 当我预测新数据时,我只想保留那些预测概率大于0.5的预测,并将所有其他预测更改为0类 在凯拉斯我怎么做 我使用的最后一层如下 model.add(layers.Dense(7,activation='softmax')) 使用softmax获得概率大于0.5的预测是否有意义 newdata = (nsamples, nfeatures) predictions = model.predict (newdata) print (predictions.shape) (50

我使用MLP模型进行分类

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

在凯拉斯我怎么做

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

使用softmax获得概率大于0.5的预测是否有意义

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

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)

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)

您可以执行以下操作:

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')

您可以执行以下操作:

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')

这意味着,由于最大概率是0.3,预测将是class
7
right?准确地说。使用argmax返回最大值的索引。然后,我们可以说label
7
的预测概率为0.3。由于它小于
0.5
,我们将其转换为
0
?将其转换为0没有任何意义。如果将其转换为0,则会丢失预测。正如我所说的,使用softmax进行n类预测时,获取类和预测不需要任何阈值。因为这可能会导致错误信息,我避免显示它,您可以简单地用列表理解来屏蔽预测数组。这意味着,由于最大概率为0.3,预测将是class
7
对吗?没错。使用argmax返回最大值的索引。然后,我们可以说label
7
的预测概率为0.3。由于它小于
0.5
,我们将其转换为
0
?将其转换为0没有任何意义。如果将其转换为0,则会丢失预测。正如我所说的,使用softmax进行n类预测时,获取类和预测不需要任何阈值。因为这可能会导致错误信息,我避免显示它,您可以简单地用列表理解来屏蔽预测数组。