Проблема вероятностного кода - PullRequest
5 голосов
/ 18 октября 2010

Когда я отключаю isWinDefault с isWinConfidence, я получаю совершенно разные результаты. Я чувствовал, что они должны быть одинаковыми. Есть ли в моем коде ошибка или свойство статистики, которое я неправильно понял?

Этот тест предназначен для имитации подбрасывания одной монеты 1x против монеты много раз.

Вопрос

Если P (x) составляет 70%, тогда p (x) * 100 должно быть> = 70 в 70% случаев, нет?

Спасибо.

    private void TestWin()
    {
        double headsUp = 0;
        double testRuns = 100;
        for (double i = 0; i < testRuns; i++)
        {
            if (IsWinConfidence())
            {
                headsUp++;
            }

        }
        label1.Text = "Probability of Heads is " + headsUp /testRuns;

    }

    private bool IsWinDefault()
    {
        if (r.NextDouble() <= .7)
        {
            return true;
        }
        return false;
    }

    private bool IsWinConfidence()
    {
        int headsCount = 0;
        for (double x = 0; x < 100; x++)
        {
            if (IsWinDefault())
                headsCount++;

        }

        double pHeadsCount = headsCount / 100d;
        if (pHeadsCount >= .7 )
        {
            return true;
        }
        else
        {
            return false;
        }


    }

Ответы [ 5 ]

2 голосов
/ 18 октября 2010

Вот простой ответ:

Вероятность 70% означает, что в среднем , 100 подбрасываний монет принесут 70 голов. Однако иногда оно будет больше 70, а иногда меньше.

Другими словами, количество хедз-апов, которое вы получите за каждую партию из 100 подбрасываний монет, будет близко к 70. Иногда ниже 70, иногда выше 70, иногда ровно 70.

Таким образом, если число колеблется около 70, то само собой разумеется, что если вы спросите «как часто оно будет превышать 70 или равно 70», вы получите ответ, который говорит: «около 50% время».

То есть вы не задаете правильный вопрос с вашим кодом.

Фактически, увеличение числа в вашем цикле в IsWinConfidence до чего-то гораздо более высокого дает число, близкое к 50.


Давайте разберем ваши аргументы здесь.

Вы говорите, что если у вас есть:

Смещенная монета, которая в 70% случаев приземляется с поднятыми головами, и 30% времени с опущенными головами

Тогда вы говорите, что:

Если я подброшу монету 100 раз, я получу более 70 голов

Одно не ведет к другому, здесь есть недостатки в ваших аргументах. Вероятность не о гарантиях, это о средних.

Если вероятность была абсолютной, ваше второе утверждение должно быть:

Если я подброшу монету 100 раз, я получу 70 голов

Обратите внимание на отсутствие здесь «более чем».

Вместо этого первый аргумент означает:

Если я подброшу монету 100 раз, затем переверну ее еще 100 раз, затем еще 100 раз, затем еще 100 раз и т. Д., В среднем каждые 100 подбрасываний будут иметь 70 голов вверх

Теперь, я не знаю достаточно о вычислениях вероятности, чтобы разделить ваши циклы и счетчики, но я знаю, что просто следуя логике, ваши аргументы потерпят неудачу.

Давайте попробуем другой подход.

Если монета ровная, хотя и смещена, то это означает, что из 100 подбрасываний монеты вы иногда получите больше 70, а иногда меньше 70.

В моем наивном уме это означает, что ... В среднем вы получите только более 70 монетных бросков в половину времени.

Увеличивая число в вашем цикле до 100.000, я получаю функцию доверия, которая возвращает значение, близкое к 50. Кажется, это подтверждает мою теорию.

Но, как я уже сказал, вероятность того, что я стану экспертом (или даже любителем) по вероятности, меньше нуля.

1 голос
/ 18 октября 2010

IsWinDefault "выигрывает" 70% времени, как и ожидалось;IsWinConfidence "выигрывает" около 53,77%, поэтому вы должны увидеть цифры, близкие к этомуСм. биномиальное распределение для получения дополнительной информации.

1 голос
/ 18 октября 2010

Если P (x) составляет 70%, тогда p (x) * 100 быть> = 70 в 70% случаев, нет?

Нет. Таким образом, достоверность не связана с вероятностью ...

То, что вы делаете во втором методе - это подбрасывание смещенной монеты 100 раз и возвращение истины, если вы получите 70 или более голов. Поскольку вы исправили свою монету так, чтобы в среднем она давала вам головы в 70% случаев, вы ожидаете получить 70 голов из 100 бросков «иногда», но это «иногда» - не 70% времени. *

0 голосов
/ 18 октября 2010

if (r.NextDouble() <= .7)

против

if (pHeadsCount >= .7 )

0 голосов
/ 18 октября 2010

Обновление

Первая функция возвращает истинное значение в 70% случаев, поэтому значение HeadCount с очень высокой вероятностью будет равно ~ 70 (если 100 заменить на большее число, если оно будет составлять 70% от этого числа). *

Следовательно

pHeadsCount >= .7

имеет вероятность 50%, при этом значение будет ~ 0,7.

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