当标准差为零时,什么是正态分布?

机器算法验证 分布 正态分布
2022-04-06 03:25:31

我知道如果标准偏差为零,则正态分布是不确定的,但我需要处理计算机算法中所有值都相等的情况。即使标准偏差为零,以下方法也必须返回有效值。如何修复此方法使其不被零除?

public static double NormalDist(double x, double mean, double standard_dev)
{
   double fact = standard_dev * Math.Sqrt(2.0 * Math.PI);
   double expo = (x - mean) * (x - mean) / (2.0 * standard_dev * standard_dev);
   return Math.Exp(-expo) / fact;
}

我的想法是在方法的开头插入这个:

        if (standard_dev == 0.0)
        {
            return x == mean ? 1.0 : 0.0;
        }

这是正确的吗?

2个回答

当标准偏差为零时,您的高斯(正常)PDF 变为狄拉克三角函数您不能简单地将零标准偏差插入常规表达式。例如,如果将 PDF 插入某种数值积分,这将不起作用。您必须修改积分。在下面的示例中,我们计算函数的平均值g(x)使用高斯密度f(x|μ,σ2)

g(x)f(x|μ,σ2)dx

当您插入零方差时,这将成为增量函数:

g(x)f(x|μ,0)dx=g(x)δ(xμ)dx=g(μ)

您的代码必须能够识别这一点,否则它将失败。

解决这个问题的一种方法非常简单:插入一个非常小的值σ变成高斯而不是零。你必须选择正确的σ对于你的情况。如果它太小,那么它会炸毁你的指数,积分将不起作用或精度会降低。这涉及到已知的 delta 函数的高斯近似:

δ(x)=limσ0N(0,σ)

这是霍格和克雷格在统计学教科书中的一个问题!作者给出了一个提示:查看法线的矩生成函数并插入 sigma = 0。

所以在回答之前,让我们记住为什么会这样——矩生成函数是独一无二的。

法线的矩生成函数,N(a,b^2), M(t|a,b^2) =

exp(at + t^2 * b^2 /2)

设置 b=0,我们有

M(t|a,B^2) = exp (at)

这是矩生成函数

f(x) = a。(我不会将其称为 Dirac Delta 函数,而是将其称为常数。请注意,Dirac Delta 函数在技术上并不是 PDF。)

这个结果应该不足为奇。随着方差的减小,概率越来越接近均值,因此极限分布是函数等于均值。

当然这可以直接证明;我们可以查看一系列函数 fn(x) = N(a,b^2/n),我们看到随着 n 接近无穷大,该序列的方差接近 0。看到它以概率收敛到常数很容易;你可以证明它几乎肯定会收敛,但这需要更多的工作。

但这不是确切的问题——可以按照霍格和克雷格的建议来回答!