我需要编码一个最大似然估计来估计一些玩具数据的均值和方差。我有一个100个样本的向量,是用numpy.random.randn(100)
创建的。数据应具有零均值和单位方差高斯分布。
我查了维基百科和一些额外的资料,但我有点困惑,因为我没有统计背景。
极大似然估计有伪码吗?我有MLE的直觉,但我不知道从哪里开始编码。
维基百科说,把日志的可能性设为argmax。我的理解是:我需要通过使用不同的参数来计算对数似然,然后取给出最大概率的参数。我不明白的是:我在哪里能找到参数呢?如果我随机尝试不同的均值和方差以获得较高的概率,我应该何时停止尝试?
Tags:
如果进行最大似然计算,则需要采取的第一步是:假设一个依赖于某些参数的分布。因为你的数据(你甚至知道你的参数),你“告诉”你的程序假设高斯分布。但是,你不告诉你的程序你的参数(0和1),但你让他们未知的先验和计算之后。
现在,你有了样本向量(我们称之为
x
,它的元素是x[0]
到x[100]
),你必须处理它。为此,您必须计算以下(f
表示probability density function of the Gaussian distribution):正如您在我的给定链接中看到的,
f
使用两个参数(希腊字母μ和σ)。现在必须计算μ和σ的值,使f(x[0]) * ... * f(x[100])
取最大可能值。完成此操作后,μ是平均值的最大似然值,σ是标准差的最大似然值。
请注意,我没有明确告诉您如何计算μ和σ的值,因为这是一个非常数学的过程,我手头没有(可能我也不理解);我只是告诉您获取值的技术,它也可以应用于任何其他分布。
因为你想最大化原始术语,你可以“简单地”最大化原始术语的对数-这就避免了你处理所有这些产品,并将原始术语转换成一些和的和。
如果你真的想计算它,你可以做一些简化,导致以下的术语(希望我没有搞砸任何事情):
现在,您必须找到μ和σ的值,以便上面的野兽是最大的。这是一个非常重要的任务,称为非线性优化。
可以尝试的一个简化是:修复一个参数并尝试计算另一个参数。这样可以避免同时处理两个变量。
我刚遇到这个,我知道它很古老,但我希望其他人能从中受益。尽管前面的注释对什么是ML优化给出了很好的描述,但是没有人给出伪代码来实现它。Python在Scipy中有一个minimizer可以做到这一点。这是线性回归的伪代码。
这对我很有用。当然,这只是基础。它不分析或给出参数估计的CIs,但它是一个开始。您还可以使用ML技术来查找对ODEs和其他模型的估计,如我所描述的here。
我知道这个问题很老了,希望你从那时起就解决了,但希望其他人能从中受益。
你需要一个数值优化程序。不确定是否有东西是用Python实现的,但如果是,那么它将在numpy或scipy和friends中实现。
查找“Nelder-Mead算法”或“BFGS”。如果所有其他操作都失败,请使用Rpy并调用R函数“optim()”。
这些函数通过搜索函数空间并试图找出最大值的位置来工作。想象一下在雾中寻找山顶的情景。你可以试着一直走最陡的路。或者你可以派一些朋友去用无线电和全球定位系统做一些测量。任何一种方法都可能导致一个错误的顶点,所以你经常需要从不同的角度出发,这样做几次。否则,你可能会认为南方峰会是最高的,因为有一个巨大的北方峰会使它黯然失色。
相关问题 更多 >
编程相关推荐