如何对精度度量计算进行矢量化



我正在为一些给定的真值标签(例如[0, 1, 1, ...]和概率,例如[[0.8, 0.2], [0.3, 0.7], [0.1, 0.9] ...](编写我自己的准确性函数(num个正确预测/总预测(。我不想使用像sklearn的accuracy_score()这样的库函数。

我使用for循环创建了这个版本:

def compute_accuracy(truth_labels, probs):
total = 0
total_correct = 0
for index, prob in enumerate(probs):
predicted_label = 0 if prob[0] > 0.5 else 1
if predicted_label == truth_labels[index]:
total_correct += 1
total += 1
if total:
return total_correct / total
else:
return -1

我现在希望通过矢量化来提高效率;0.5匹配真实标签:

import numpy as np
def compute_accuracy(truth_labels, probs):
return ((np.array(probs[:][value_of_truth_labels_at_same_index]) > 0.5).astype(int) == np.array(truth_labels)).mean()

在这一点上,我不知道如何在不返回for循环的情况下拉出value_of_truth_labels_at_same_index

import numpy as np
N = 10
X = np.random.randint(0,2,(N,))
p = np.random.random((N,2))
acc = np.mean(np.argmax(p, axis=1) == X)*100
print(f'Accuracy: {acc}%')

相关内容

  • 没有找到相关文章