深度学习如何将概率分数分配给 类

Deep learning how to assign probability scores to the classes

我正在 运行 深度学习 keras。我需要将概率分配给二进制 class 化的预测 classes。命令 model.predict() 提供一个输出,它是一个数组,由带有概率分数的单列组成。我需要根据它们的概率分数对两个 classes 进行排序。在 SVM 的情况下,提供了一个二维数组,可能如下所示:

array([[1.73012153e-01, 8.26987847e-01],
[9.20157632e-01, 7.98423679e-02],
[1.65736191e-01, 8.34263809e-01],
[9.61620647e-01, 3.83793535e-02]]

对于以下 classes 列表:

1
0
1
0

通过将 classes 的列表与该数组进行比较,可以得出结论,class 1 被分配了数组第二个条目的概率分数,而 class 0从第一个条目。因此,可以为两个 classes 分配大于 0.5 的分数。很明显,两个条目总和为一个。

有人可以提供评论并解释我如何找到 class 0 和 1 的概率分数吗?通过将阈值设置为 0.5 并声称 class 1 是概率得分大于 0.5 的那个,而 class 0 是概率得分小于 0.5 的那个导致 class 1 被分配高概率分数和 class 0 个低概率分数。由于在我的任务中我需要从两个 class 中选择具有高概率分数的命中,因此我不知道如何在 keras 的情况下进行。 model.predict()keras 中的输出如下所示:

array([[6.6122383e-01],
[6.3882202e-02],
[9.7862136e-01],
[3.9379299e-03],
[4.2064726e-02],
[9.7605175e-07],
[5.5374026e-01]]

我用来生成模型的代码是:

from tensorflow.keras.layers import Dropout 
model = Sequential()  
model.add(Dense(30,activation='relu')) 
model.add(Dropout(.5)) 
model.add(Dense(15,activation='relu')) 
model.add(Dropout(.5)) #binary classifcation 
model.add(Dense(1,activation='sigmoid')) 
model.compile(loss='binary_crossentropy',optimizer='adam') 
model.fit(x=x_train,y=y_train,epochs=600,validation_data=  (x_test,y_test), verbose = 0) 

谢谢。

最后一层带有sigmoid激活函数的DNN会给出一个概率数组,你可以自己构造class列:

df["class_1_prob"]=predicted_prob
df["class_0_prob"]=1-predicted_prob

df["target_class_0"]=[0 if x <0.5 else 1 for x in predicted_prob]
df["target_class_1"]=np.abs(1-df["target_class_0"])