4

几个月来我一直试图找到这个问题的答案(用于机器学习应用程序),这似乎不是一个非常困难的问题,但我是一名软件工程师,数学从来都不是我的强项之一。

这是场景:

我有一个(可能)重量不均匀的硬币,我想弄清楚它出现正面的概率。我知道来自同一个盒子的硬币的平均概率为p,我也知道这些概率的标准差(称之为s)。

(如果除均值和标准差之外的其他硬币概率的其他摘要属性有用,我可能也可以得到它们。)

我掷硬币n次,结果正面h次。

天真的方法是概率只是h/n - 但如果 n 很小,这不太可能是准确的。

是否有一种计算有效的方法(即不涉及非常大或非常小的数字)来考虑ps以得出更准确的概率估计,即使n很小?

如果任何答案可以使用伪代码而不是数学符号,我将不胜感激,因为我发现大多数数学符号都是难以理解的;-)


其他答案: SO 上还有其他一些类似的答案,但提供的答案并不令人满意。例如,这在计算上效率不高,因为它很快涉及到比双精度浮点数更小的数字。而这个结果是不正确的。

4

5 回答 5

3

不幸的是,如果你不知道一些基本的数学知识,你就无法进行机器学习——这就像在编程方面向某人寻求帮助,但不想知道“变量”、“子例程”和所有那些 if-then 的东西。

更好的方法称为贝叶斯积分,但有一种更简单的近似方法,称为“最大后验”(MAP)。除了您可以放入先验分布之外,这与通常的想法非常相似。

花哨的话,但你可能会问,h/(h+t) 公式是从哪里来的?当然这很明显,但事实证明这是当你“没有先验”时得到的答案。当您添加先验时,下面的方法是更复杂的一个级别。下一个将是贝叶斯积分,但这更难,也许是不必要的。

据我了解,问题有两个方面:首先,您从硬币袋中取出一枚硬币。这枚硬币有一种叫做 theta 的“头晕”,因此它给出了翻转的头部 theta 分数。但是这枚硬币的 theta 来自主分布,我想我假设它是具有平均 P 和标准偏差 S 的高斯分布。

你接下来要做的是写下看到整个 shebang 的总非归一化概率(称为可能性),所有数据:(h 头,t 尾)

L = (theta)^h * (1-theta)^t * Gaussian(theta; P, S)。

高斯(theta; P, S) = exp( -(theta-P)^2/(2*S^2) ) / sqrt(2*Pi*S^2)

这就是“首先从高斯绘制 1 个 theta 值”然后使用该 theta 从硬币中绘制 h 个正面和 t 个反面的含义。

MAP 原理说,如果您不知道 theta,请在已知数据的情况下找到使 L 最大化的值。你用微积分做到这一点。让它变得简单的诀窍是你先取对数。定义 LL = log(L)。只要 L 最大化,LL 也会最大化。

所以 LL = h log(theta) + t log(1-theta) + -(theta-P)^2 / (2*S^2)) - 1/2 * log(2*pi*S^2)

通过微积分寻找极值,您可以找到 dLL/dtheta = 0 的 theta 值。由于对数的最后一项中没有 theta,您可以忽略它。

dLL/dtheta = 0 = (h/theta) + (P-theta)/S^2 - (t/(1-theta)) = 0。

如果你能解出这个方程的 theta,你会得到一个答案,即在给定正面数量 h 和反面数量 t 的情况下,theta 的 MAP 估计值。

如果您想要一个快速的近似值,请尝试执行牛顿方法的一步,在该方法中,您从建议的 theta 开始,在 theta = h/(h+t) 的明显(称为最大似然)估计值处。

这个“明显”的估计是从哪里来的?如果您执行上述操作,但不输入高斯先验:h/theta - t/(1-theta) = 0,您将得出 theta = h/(h+t)。

如果你的先验概率真的很小,通常情况下,而不是接近 0.5,那么在 theta 上的高斯先验可能是不合适的,因为它预测一些负概率的权重,显然是错误的。更合适的是对数θ('对数正态分布')的高斯先验。以相同的方式插入它并完成微积分。

于 2009-11-08T19:54:13.853 回答
2

您在这个问题中没有足够的信息。

盒子里有多少硬币?如果是两个,那么在某些情况下(例如,一个硬币总是正面,另一个总是反面)知道 p 和 s 会很有用。如果它超过几个,特别是如果只有一些硬币只是轻微加权,那么它就没有用了。

什么是小n?2?5? 10?100?加权硬币正面/反面出现的概率是多少?100/0、60/40、50.00001/49.99999?权重如何分配?每枚硬币都是两种可能的权重之一吗?他们遵循钟形曲线吗?等等

归结为:加权/未加权硬币之间的差异、加权硬币的分布以及盒子中硬币的数量都将决定 n 必须是多少才能让您以很高的信心解决这个问题。

您尝试做的事情的名称是伯努利试验。知道名称应该有助于找到更好的资源。


回复评论:

如果您的 p 差异那么小,您将不得不进行大量试验并且无法绕过它。

假设偏差分布均匀,p 仍然是 0.5,所有标准偏差都会告诉你,至少有一些硬币有轻微偏差。

在这种情况下,抛掷多少次将再次取决于硬币的权重。即使投掷了 500 次,你也不会有很强的信心(大约 2/3)检测到 0.51/0.49 的分裂。

于 2009-11-08T17:11:32.310 回答
2

您可以将p其用作估计概率的先验。这与进行伪计数平滑基本相同。即,使用

(h + c * p) / (n + c)

作为你的估计。当hn很大时,就变成 了h / n。当hn很小时,这只是c * p / c = p。的选择c取决于你。你可以以此为基础,s但最终你必须决定有多小太小。

于 2009-11-08T19:07:23.963 回答
1

一般来说,您正在寻找的是最大似然估计。Wolfram 演示项目说明了在给定抛掷样本的情况下估计硬币正面朝上的概率。

于 2009-11-08T20:09:11.537 回答
1

好吧,我不是数学家,但我认为简单的贝叶斯方法是直观且广泛适用的,足以在其中投入一点。上面的其他人已经建议了这一点,但也许如果你喜欢我,你会更喜欢冗长。在这个术语中,您有一组互斥假设 H 和一些数据 D,并且您想要找到给定数据的每个假设 Hi 正确的(后验)概率。如果您必须选择一个,假设您会选择具有最大后验概率的假设(如上所述的 MAP)。正如马特上面所指出的,贝叶斯方法与仅最大似然法(找到使 Pr(D|H) 最大化的 H)的区别在于,您还拥有一些关于哪些假设最有可能的先验信息,并且您希望合并这些先验。

所以你有基本概率 Pr(H|D) = Pr(D|H)*Pr(H)/Pr(D)。您可以通过为您希望测试的每个假设创建一系列离散概率 Hi 来以数值方式估计这些 Pr(H|D),例如 [0.0,0.05, 0.1 ... 0.95, 1.0],然后确定您的先验 Pr(H ) 对于每个 Hi——上面假设你有一个正态分布的先验,如果这是可以接受的,你可以使用平均值和 stdev 来获得每个 Pr(Hi)——或者如果你愿意,可以使用另一个分布。抛硬币时,Pr(D|H) 当然由二项式使用观察到的 n 次试验的成功次数和正在测试的特定 Hi 来确定。分母 Pr(D) 可能看起来令人生畏,但我们假设我们已经用我们的假设覆盖了所有基础,因此 Pr(D) 是 Pr(D|Hi)Pr(H) 对所有 H 的总和。

如果你想一想,这很简单,如果你再想一想,可能就不是这样了。

于 2009-12-04T01:10:55.893 回答