对于多类分类,我只能用numpy方法来计算假阳性率。我有两个numpy数组,一个用于预测((m,k)形状:m是样本元素的计数,k是类别的计数),另一个用于真正的标签((m,)形状)。
我已经做了什么:确定所有行(prediction_labels数组)的预测(正)元素indeces,为唯一类别(true_labels)创建一个集合。
我想要做的是:在同一时间迭代prediction_labels和y_true数组,并计算给定元素(true_labels中的每个唯一值)在相同位置上是否相等。因此,我想确定数组(false_positive_counts)中按类别划分的假阳性计数。
例如:
def false_positive_rate(y_pred, y_true):
prediction_labels = np.argmax(y_pred, axis=1)
true_labels = np.unique(y_true)
false_positive_counts = ... # ?
...
return fpr
y_pred = np.array([[1., 0., 0., 0.],
[1., 0., 0., 0.],
[0., 0., 1., 0.],
[0., 0., 1., 0.],
[0., 1., 0., 0.],
[0., 0., 0., 1.],
]) # [0,0,2,2,1,3]
y_true = np.array([0, 2, 1, 1, 1, 3])
print(false_positive_rate(y_pred, y_true)) # 3/20
发布于 2022-03-26 20:28:02
你的预测是肯定的,也是消极的。但是,答案并不是虚假的。
因此,您的FPR始终是1。
def false_positive_rate(y_pred_raw, y_true):
y_pred = np.argmax(y_pred_raw, axis=1)
TP, FP, FN, TN = 0,0,0,0
for pp, tt in zip(y_pred, y_true):
if pp==tt: TP+=1;
elif pp!=tt: FP+=1;
# there is no case for FN, TN
print(f"TP={TP}, FP={FP}, FN={FN}, TN={TN}");
FPR = FP/ (TN+FP);
return FPR
https://stackoverflow.com/questions/71631841
复制相似问题