Какой смысл оценки точности по многочлену против argmax? - PullRequest
1 голос
/ 04 мая 2020

Какова цель оценки точности прогнозирования с использованием 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 выглядит так: multinomial - это выборка согласно некоторому распределению - просто не уверен, насколько это важно при оценке точность.

Я заметил, что многочлен недетерминирован c - это означает, что он выдает разную точность, предположительно путем включения разных выборок при каждом запуске.

1 Ответ

2 голосов
/ 04 мая 2020

Здесь, с multinomial - мы выбираем классы с полиномиальным распределением.

Из примера Википедии

Предположим, что при трехсторонних выборах для в большой стране кандидат А получил 20% голосов, кандидат Б получил 30% голосов, а кандидат C получил 50% голосов. Если шесть избирателей выбраны случайным образом, какова вероятность того, что в выборке будет ровно один сторонник кандидата А, два сторонника кандидата Б и три сторонника кандидата C в выборке?

Примечание: поскольку мы ' Исходя из предположения, что количество избирателей велико, разумно и допустимо считать вероятности неизменными после выбора избирателя для выборки. Технически говоря, это выборка без замены, поэтому правильное распределение - это многомерное распределение гипергеометрии c, но распределения сходятся по мере увеличения популяции.

Если мы присмотримся, мы делаем то же самое, выборка без замены .

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

ref: https://pytorch.org/docs/stable/torch.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]

Но этого не происходит при оценке модели, поскольку она не детерминирована c и требует генератора случайных чисел для имитации эксперимента. Это особенно полезно для симуляций Монте-Карло, а также для расчетов до и после. Я видел пример классификации графа, где использовалась такая оценка. Но я думаю, что это не распространено и (даже полезно) в большинстве задач классификации в машинном обучении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...