为什么要使用蒙特卡罗方法?

16

蒙特卡罗方法应该在什么情况下使用?

例如,为什么乔尔决定在基于证据的进度管理中使用蒙特卡罗方法,而不是系统地处理过去一年的所有用户数据?


“methodically processing” 用户数据是什么意思?随机样本是将钟形曲线相加的一种基本方法,你会如何处理呢? - amwinter
2
你不能处理所有可用的数据并得出相同的统计结果,比如“75%的数据大于X,50%的数据大于Y,25%的数据大于Z”吗? - Gili
5个回答

18
蒙特卡罗方法通常用于问题的维度过高,传统方案无法解决。Persi Diaconis 的 The Markov Chain Monte Carlo Revolution 是该主题的一篇很好的入门论文。请注意,保留 "" 和 "" 和 html 标签,但不要写解释。

有趣的论文,但我很快就迷失在细节中了。 - Gili
这篇论文看起来不错,但我必须说,对于一个在2009年之后撰写的MC论文中使用“Revolution”这个词汇的粒子物理学家来说,似乎有点奇怪。我们已经做了这么长时间,以至于Metropolis方案已经成为传统方案。 - dmckee --- ex-moderator kitten
@dmckee 那篇论文的目标受众我认为是广泛的数学家群体,不仅包括应用数学家或统计学家,还包括其他领域(如代数,分析等)中涉及蒙特卡罗方法不是如此广泛知晓的人。 - jmbr

13

假设你想要估计一些感兴趣的数量。在Joel的例子中,“船期”就是你想要估计的内容。在大多数这种情况下,有一些随机因素会影响我们的估计。

当你有一个随机量时,通常需要知道它的均值和标准差,以便采取适当的行动。在简单的情况下,可以将该数量建模为标准分布(例如正态分布),并且存在用于均值和标准差的解析公式。然而,存在许多情况没有解析公式。在这种情况下,我们不使用解析解来计算均值和标准差,而是采用模拟方法。其思路如下:

步骤1:使用适当的分布生成影响所需数量的因素

步骤2:计算所需数量

重复步骤1和2很多次,并计算你想要了解的经验平均值和标准差。

上述内容迄今为止是蒙特卡罗应用程序的典型应用。请参阅Jarrod提供的维基百科链接,其中包含几个这样的应用程序以及一些有趣应用的示例,其中不存在固有的随机性(例如估计pi的值)。


我喜欢你的回答,但是你给出的步骤非常模糊。你能不能想办法让它们更精确一些? - Gili
1
蒙特卡罗方法是一个广泛应用的领域。例如,假设您想要一些关于各种项目特征(例如开发人员数量、目标操作系统等)和交货时间(例如3个月、6个月等)的数据。您可能已经知道项目特征和交货时间之间的关系。例如,Ship Times 〜 N(mu,sigma ^ 2)I(Ship Times> 0),其中N(.)表示正态分布,mu和sigma是项目特征的函数,而I(Ship Times> 0)表示交货时间不能为负数。 - vad
1
您可能想知道更改某些项目参数(例如增加开发人员数量)对交货时间的影响。不幸的是,截断正态分布的均值没有封闭形式表达式。因此,您需要执行以下操作:步骤1:使用拒绝抽样或反演变换方法生成截断正态分布步骤2:存储船运时间(在这种情况下,步骤2不涉及任何计算)重复步骤1和步骤2 N次,并计算您在步骤2中存储的船运时间的平均值和标准偏差。以上假设您知道项目参数与mu和sigma之间的关系。 - vad
1
如果您不知道这种关系,那么您当然需要对这种关系进行建模并估算相关参数。例如,您可以假设 mu = beta1 *(开发人员数量)+ beta2 *(与客户会议次数)等,并估算beta1,beta2等。希望能对您有所帮助。 - vad

3
维基百科上有一篇关于蒙特卡罗模拟方法的好文章。我在几个场合使用过蒙特卡罗方法 - 简而言之,MC方法在尝试使用几乎随机的样本集来预测结果时往往会给出相对准确的答案,而某人通常会使用直觉来猜测趋势。不幸的是,试图解释MC方法是相当困难的,因此请查看该文章。

如果我有X款游戏的评分和安装数量数据。 问题:预测Y款游戏的安装数量。 这是否是使用MC模拟的正确案例? - Amit Tripathi

3
有时候检查所有选项是不可行的。

2
因为编程任务的预估通常分布很广,所以更有意义的方法是从统计上处理它们。
如果我们考虑一个包含数百个任务的项目,那么预估误差会平均分布,最终得到的分布将显示完成项目的可能性范围。
这种方法也可以避免一些严重问题,如任务缓冲和学生综合症进一步扭曲结果。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接