one-hot 编码值的 torchmetrics 行为
torchmetrics behaviour for one-hot encoded values
我很难理解以下场景。我在每个 class 上的输出概率为 0.0,这意味着 f1 分数、准确性和召回率等指标的值应该为零?但是我得到以下信息:
import torch, torchmetrics
preds = torch.tensor([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])
target = torch.tensor([[1, 0, 0],
[0, 1, 0],
[0, 0, 1]])
print("F1: ", torchmetrics.functional.f1_score(preds, target))
print("Accuracy: ", torchmetrics.functional.accuracy(preds, target))
print("Recall: ", torchmetrics.functional.recall(preds, target))
print("Precision: ", torchmetrics.functional.precision(preds, target))
输出:
F1: tensor(0.)
Accuracy: tensor(0.6667)
Recall: tensor(0.)
Precision: tensor(0.)
为什么准确度是 0.6667?我希望所有输出都是 0.0.
您的 preds
是 multi-label 分类问题的概率数组:
为了简单起见,我假设这样的例子:
preds = torch.tensor([[0., 0., 0.]]) # multi-labels [label1, label2, label3]
target = torch.tensor([[1, 0, 0]])
真底片是2,因为分类器预测label2
和label3
不存在,而label2和label3确实不应该存在。
真阳性是0,因为分类器预测任何标签的存在,而标签应该存在。
假阴性是1因为分类器预测label1
不存在而label1
应该存在.
误报是0,因为分类器预测任何标签,而标签不应该存在。
根据上式,Accuracy = 2/3 = 0.6667
您可以阅读 here 更多关于不同指标及其计算的信息。
我很难理解以下场景。我在每个 class 上的输出概率为 0.0,这意味着 f1 分数、准确性和召回率等指标的值应该为零?但是我得到以下信息:
import torch, torchmetrics
preds = torch.tensor([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])
target = torch.tensor([[1, 0, 0],
[0, 1, 0],
[0, 0, 1]])
print("F1: ", torchmetrics.functional.f1_score(preds, target))
print("Accuracy: ", torchmetrics.functional.accuracy(preds, target))
print("Recall: ", torchmetrics.functional.recall(preds, target))
print("Precision: ", torchmetrics.functional.precision(preds, target))
输出:
F1: tensor(0.)
Accuracy: tensor(0.6667)
Recall: tensor(0.)
Precision: tensor(0.)
为什么准确度是 0.6667?我希望所有输出都是 0.0.
您的 preds
是 multi-label 分类问题的概率数组:
为了简单起见,我假设这样的例子:
preds = torch.tensor([[0., 0., 0.]]) # multi-labels [label1, label2, label3]
target = torch.tensor([[1, 0, 0]])
真底片是2,因为分类器预测label2
和label3
不存在,而label2和label3确实不应该存在。
真阳性是0,因为分类器预测任何标签的存在,而标签应该存在。
假阴性是1因为分类器预测label1
不存在而label1
应该存在.
误报是0,因为分类器预测任何标签,而标签不应该存在。
根据上式,Accuracy = 2/3 = 0.6667
您可以阅读 here 更多关于不同指标及其计算的信息。