我使用MLP模型进行分类。
当我对新数据进行预测时,我想只保留那些预测概率大于0.5的预测,并将所有其他预测更改为0类。
如何在keras中实现?
我使用using最后一层如下所示model.add(layers.Dense(7 , activation='softmax'))
使用softmax获得概率大于0.5的预测是否有意义?
newdata = (nsamples, nfeatures)
predictions = model.predict (newdata)
print (predictions.shape)
(500, 7)
你可以这样做:
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')
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)