深度学习如何将概率分数分配给 类
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"])
我正在 运行 深度学习 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"])