statistics - 如何根据少量证据有效地估计概率?

标签 statistics machine-learning probability

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

这是场景:

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

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

我抛硬币 n 次,结果正面朝上 h 次。

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

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

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

<小时/>

其他答案: SO上还有一些类似的答案,但提供的答案并不令人满意。例如this计算效率不高,因为它很快涉及的数字比 double float 所能表示的要小得多。和this结果证明其中一个是错误的。

最佳答案

不幸的是,如果不了解一些基本数学,你就无法进行机器学习——这就像向某人寻求编程帮助,但又不想了解“变量”、“子例程”以及所有 if-then 之类的东西。

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

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

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

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

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

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

这就是“首先从高斯中提取 1 个 θ 值”,然后使用该 θ 从一枚硬币中提取 h 个正面和 t 个反面。

MAP 原则说,如果您不知道 theta,请在给定您已知的数据的情况下找到使 L 最大化的值。你可以用微积分来做到这一点。让它变得简单的技巧是先取对数。定义 LL = log(L)。当 L 最大化时,LL 也将最大化。

所以 LL = hlog(theta) + tlog(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。

如果您能解出该 θ 方程,您将得到答案,即给定正面数 h 和反面数 t 的 MAP 估计值。

如果您想要快速近似,请尝试执行牛顿法的一步,即从您提出的 theta 明显(称为最大似然)估计值 theta = h/(h+t) 开始。

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

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

关于statistics - 如何根据少量证据有效地估计概率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1697013/

相关文章:

layout - 如何确定自适应网页设计的常见设备的常见视口(viewport)尺寸(不是屏幕尺寸)?

r - 使用方法错误 ("predict"): no applicable method for 'predict' applied to an object of class "c(' double', 'numeric')

r - wilcox_test 为 MWU 返回错误的 U 值

tensorflow - 将稀疏张量密集形状转换为 tensorflow 中的整数值

matlab - 在 Matlab 中生成三角分布

r - 如何使用R随机森林来减少没有离散类的属性?

machine-learning - Caffe的输入数据标准化

machine-learning - 为什么支持向量的个数为零?

matlab - 如何在 MATLAB 中对数据进行多元正态分布拟合?

php - 如何按受欢迎程度对文章进行排序?