如何基于少量证据有效地估计概率?

时间:2009-11-08 16:13:42

标签: statistics machine-learning probability

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

以下是该方案:

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

(如果除了他们的平均值和stddev之外的其他硬币的概率的其他概要属性将是有用的,我也可以得到它们。)

我掷硬币 n 次,然后它出现 h 次。

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

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

如果任何答案可以使用伪代码而不是数学符号,我会很感激,因为我发现大多数数学符号都是不可穿透的; - )


其他答案: 关于SO的其他一些答案是相似的,但提供的答案并不令人满意。例如this计算效率不高,因为它快速涉及的数字方式比可以表示的数字小,即使在双精度浮点数中也是如此。并且this结果证明不正确。

5 个答案:

答案 0 :(得分:3)

不幸的是,你不能在不知道基本数学的情况下进行机器学习 - 这就像在编程时要求某人帮助但不想知道“变量”,“子程序”以及所有那些if-then的东西。

更好的方法称为贝叶斯积分,但有一个更简单的近似值称为“最大值postieri”(MAP)。它几乎与通常的想法相似,除了你可以放入先前的分配。

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

据我所知,问题有两个方面:首先你从硬币袋中取出一枚硬币。这枚硬币有一个叫做theta的“顽固”,因此它给出了翻转的头部θ分数。但是这个硬币的theta来自主分布,我想我认为它是高斯分布,平均值为P,标准差为S.

接下来你要做的是写下看到整个shebang的总非标准化概率(称为似然),所有数据:( h head,t tails)

L =(θ)^ h *(1-θ)^ t *高斯(θ,P,S)。

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

这是“从高斯第一次绘制θ值1”的意思,然后使用theta从硬币中绘制h头和t尾。

MAP原则说,如果您不知道θ,请根据您知道的数据找到最大化L的值。你用微积分做到了。让它变得简单的诀窍是你首先采用对数。定义LL = log(L)。无论何时L最大化,LL也将是。

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

通过微积分寻找极值,你会发现theta的值,使得dLL / dtheta = 0。 由于日志的最后一个术语没有theta,你可以忽略它。

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

如果你能解决θ的这个等式,你会得到一个答案,给出头数h和尾数t的θ估计。

如果你想要一个快速近似,尝试采用牛顿方法的一个步骤,在那里你从你提出的theta开始,在theta = h /(h + t)的明显(称为最大似然)估计值。

这个“显而易见”的估计来自哪里?如果你做了上面的事情,但没有放入高斯先验:h / theta - t /(1-theta)= 0你会得到theta = h /(h + t)。

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

答案 1 :(得分:2)

你在这个问题上没有足够的信息。

盒子里有多少枚硬币?如果它是两个,那么在某些情况下(例如一个硬币总是头,另一个总是尾巴)知道p和s会很有用。如果它不止一些,特别是如果只有一些硬币只是略微加权那么它就没用了。

什么是小n? 2? 5? 10? 100?加权硬币出现在头尾的概率是多少? 100 / 0,60 / 40,50.00001 / 49.99999?权重是如何分配的?每枚硬币有两种可能的重量吗?它们是否遵循钟形曲线?等

归结为:加权/未加权硬币之间的差异,加权硬币的分布以及盒子中的硬币数量都将决定你必须以高信心解决这个问题。 / p>

您尝试执行的操作的名称是Bernoulli trial。知道这个名字应该有助于找到更好的资源。


对评论的回应:

如果你的p差异很小,那么你将不得不进行大量的试验,并且没有解决它。

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

在这些情况下,通过加权硬币将再次确定多少次投掷。即使有500次投掷,你也不会有强烈的信心(大约2/3)检测到.51 / .49分裂。

答案 2 :(得分:2)

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

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

作为您的估计。当hn很大时,这就变成了h / n。当hn很小时,这只是c * p / c = pc的选择取决于您。您可以将其基于s,但最后您必须确定它太小。

答案 3 :(得分:1)

一般来说,您要找的是Maximum Likelihood Estimation。 Wolfram示范项目有一个estimating the probability of a coin着陆头的图示,给出了一个投掷样本。

答案 4 :(得分:1)

嗯,我不是数学家,但我认为简单的贝叶斯方法是直观的,并且广泛适用,足以放入其中。上面的其他人已经提出了这个建议,但也许如果你喜欢我,你会更喜欢冗长。 在这个术语中,您有一组互斥的假设H和一些数据D,并且您希望在给定数据的情况下找到每个假设Hi正确的(后验)概率。假设您必须选择一个假设,那么您可能会选择具有最大后验概率的假设(如上所述的MAP)。正如Matt在上面所指出的那样,贝叶斯方法与唯一最大似然(找到最大化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 - 上面假设您有正常的先验分布,如果这是可以接受的,您可以使用mean和stdev来获得每个Pr(Hi) - 或者如果您愿意,可以使用其他分布。对于硬币投掷,Pr(D | H)当然由二项式确定,使用观察到的n次试验的成功次数和特定的Hi进行测试。分母Pr(D)可能看起来令人生畏,但我们假设我们用假设涵盖了所有基数,因此Pr(D)是Pr(D | Hi)Pr(H)对所有H的总和。

如果你仔细想想它会非常简单,如果你再多想一想,也许不会这样。