多项式与argmax评价准确率的意义是什么?

问题描述 投票:1回答:1

使用 multinomial 而不是直截了当 argmax?

probs_Y = torch.softmax(model(test_batch, feature_1, feature_2), 1)

sampled_Y = torch.multinomial(probs_Y, 1)
argmax_Y = torch.max(probs_Y, 1)[1].view(-1, 1)

print('Accuracy of sampled predictions on the test set: {:.4f}%'.format(
    (test_Y == sampled_Y.float()).sum().item() / len(test_Y) * 100))
print('Accuracy of argmax predictions on the test set: {:4f}%'.format(
    (test_Y == argmax_Y.float()).sum().item() / len(test_Y) * 100))

结果。

Accuracy of sampled predictions on the test set: 88.8889%

Accuracy of argmax predictions on the test set: 97.777778%

读了pytorch的文档,它看起来像: 多项式 是根据某种分布进行抽样--只是不知道这与评估精度有什么关系。

我注意到多项式是非确定性的--这意味着每次运行时,它输出的精度都不一样,大概是通过包含不同的样本。

machine-learning deep-learning pytorch
1个回答
2
投票

这里,用 multinomial - 我们是用多叉分布来采样的。

从维基百科的例子来看。

假設在某大國的三方選舉中,候選人A得票率為20%,候選人B得票率為30%,候選人C得票率為50%。如果随机抽取6名选民,那么样本中正好有一名支持者支持候选人A,两名支持者支持候选人B,三名支持者支持候选人C的概率是多少?

註:由於我們假設投票人口眾多,因此,一旦有選民被抽中,將概率視為不變是合理的,也是可以接受的。从技术上讲,这是不进行替换的抽样,所以正确的分布是多元超几何分布,但随着人口的增长,分布会收敛。

如果我们仔细观察,我们也是这样做的。采样不更换.

torch.multinomial(input, num_samples, replacement=False, *, generator=None, out=None)

参考文献。https:/pytorch.orgdocsstabletorch.html?highlight=torch%20multinomial#torch.multinomial。

多项式实验是一种统计实验,它由n次重复试验组成。每个试验都有一个离散的可能结果数。在任何一次试验中,某一个结果发生的概率是恒定的(这是最初的假设)。

enter image description here

所以,投票数可以用概率来模拟。从软输出的分类是一个类似的投票过程。

如果我们重复实验的次数足够多,就会达到和实际概率一样接近。

例如,让我们从一个初始的 probs = [0.1, 0.1, 0.3, 0.5].

我们可以重复这个实验 n 次,并计算一个索引被选择的次数。torch.multinomial.

import torch

cnt = [0, 0, 0, 0]
for _ in range(5000):
  sampled_Y = torch.multinomial(torch.tensor([0.1, 0.1, 0.3, 0.5]), 1)
  cnt[sampled_Y[0]] += 1

print(cnt)

50次迭代后: [6, 3, 14, 27]

5000次迭代后: [480, 486, 1525, 2509]

经过50000次迭代。[4988, 4967, 15062, 24983]

但是,这是避免在模型评估 因为它不是确定性的,需要一个随机发生器 模拟实验。这对于蒙卡洛模拟、先验计算特别有用。我见过一个图分类的例子,就是用的这种评价。但我认为它在机器学习的大多数分类任务中并不常见,(甚至是有用的)。

© www.soinside.com 2019 - 2024. All rights reserved.