当我使用isWinConfidence切换isWinDefault时,我得到了截然不同的结果。我觉得他们应该是一样的。我的代码或统计数据中是否存在我误解的错误?
此测试旨在模拟单次硬币1倍与硬币翻转多次。
问题是
如果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;
}
}
答案 0 :(得分:2)
这是一个简单的答案:
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。这似乎支持了我的理论。
但正如我所说,我作为专家(甚至是dabbler)的可能性小于零。
答案 1 :(得分:1)
如果P(x)是70%那么p(x)* 100 是&gt; = 70%的时间,没有?
没有。信心与这种可能性无关......
你正在做的是第二种方法是抛弃有偏见的硬币100次,如果你得到70或者更多的头,则返回true。因为你已经固定了你的硬币,所以平均来说,70%的时间可以让你在“有时”100次投掷中获得70个头,但是“有时”不是70%的时间。
答案 2 :(得分:1)
IsWinDefault
“赢得”70%的时间,正如预期的那样;
IsWinConfidence
“胜出”约53.77%,所以你应该看到接近这个数字。
有关详情,请参阅binomial distribution。
答案 3 :(得分:0)
<强>更新强>:
第一个函数在70%的时间内返回true,因此headsCount将以非常高的概率等于~70(如果100将被更大的数字替换,如果将倾向于该数字的70%)。
因此
pHeadsCount >= .7
有50%的概率,wince值将为〜0.7。
答案 4 :(得分:0)
if (r.NextDouble() <= .7)
VS
if (pHeadsCount >= .7 )
答案 5 :(得分:0)
概率是一个计数问题。计算每个类类型(0 头 1 尾)的出现,然后除以总数。几率是概率的函数。赔率告诉您翻转时出现正面或反面的可能性。
from collections import Counter
flips=10000
data=[]
for i in range(flips):
data.append(random.choice([0,1]))
dictProbability={}
for key,value in Counter(data).items():
dictProbability[key]=value/flips
print(dictProbability)
输出:
{0: 0.5014, 1: 0.4986}
.5 probability of heads
.49 probability of tails
伯努利二项式分布