使用蒙特卡洛模拟进行预测
随着技术的发展,特别是在人工智能领域,对不同的模型训练方法的了解对程序员来说是至关重要的。这些技术有助于决策过程的自动化,并有助于预测随机变量被截获时不同结果的概率。本文将简化蒙特卡洛方法的操作,并帮助程序员清楚地了解这种技术的内涵。
什么是蒙特卡洛模拟?
它是一个简单的模型,用来勾勒出所做决定的各种结果的概率。模拟有助于描述和评估预期的风险影响,以消除不确定性,做出更好的决定。
这是一种方法技术,而不是一种精确技术。伪随机数生成器是在使用计算机实施时使用的。它经常被用于各种行业,包括工程、金融、商业、项目规划等等。
与其他技术的独特属性
-
简单、灵活和可扩展的算法在使用时,它们将一个复杂的模型简化为基本事件和互动的集合。在计算机上,打开概率通过规则来编码模型行为可能会很快完成。
-
它必须产生随机样本作为其输出的结果。
-
它的输入的分布必须被确定。
-
当对数据输入进行实验时,它的预测必须是已知的。
了解蒙特卡洛基础知识
蒙特卡洛过程中需要遵循的基本步骤
对于蒙特卡洛模型,有四个主要步骤需要遵循,以便得出预期的结果。下面将讨论这些步骤。
- 定义输入概率
概述可能的输入领域。模拟的现实应该类似于我们想研究和描述的行为的现实。
- 生成随机输入
从一个概率分布中产生随机输入。输入的特征应该与我们旨在复制的真实宇宙的特征相似。这意味着,输入之间的依赖关系应该得到体现。
- 计算输入
计算应该是确定性的。所谓确定性,我们的意思是,每次计算时,它们应该能够给出相同的输出。
- 合并结果
将信息组合起来,创造出期望的结果。典型的输出包括。
柱状图
简而言之的统计学(平均值、方差和标准差)
使用实例实现基本步骤
这些例子显示了你如何实现Monte Carlo的基本步骤,从而得出一个预测模型。
现在,让我们看一下使用Python的几个例子。对于初学者,你可以使用任何带有Python扩展的文本编辑器。你可以查看这篇文章,了解更多关于安装和一些Python基本功能的细节。
例1:近似计算π的值
考虑一个最合适的圆,可以在[-1, 1]²上开槽成一个范围为ℝ2的正方形。
-
圆的半径=1,面积=π。
-
正方形的面积为2²=4。
-
因此,它们的面积之比为𝜋/4。
解决方案
可以用下面的蒙特卡洛方法来近似计算π的值。
-
在[-1, 1]²上画一个正方形。
-
在正方形内画一个半径最长的圆。
-
在正方形上撒下大量的谷物P。
-
数一数落在圆内的谷粒。
-
所数的谷物除以P再乘以4就是一个近似值。
利用这四个主要步骤,pi ,可以估算出以下结果。
在这个例子中,我们实现了Python中Numpy库的使用。
定义可能的输入
在这里,我们把所有的点均匀地分布在*[-1, 1]²*的单元格内
生成随机输入
使用单元格生成一个点(x, y)。这段代码生成了一个点(x,y)。
x = numpy.random.uniform(-1, 1)
y = numpy.random.uniform(-1, 1)
计算输入
测试一个随机生成的点(x, y)是否在圆的点内。要做到这一点,请编写以下代码。
if numpy.sqrt(x**2 + y**2) < 1:
print("The point is inside")
堆积/汇总输出/结果
计算在圆的周长内的点的数量。
N = 10_000
inside = 0
for i in range(N):
x = numpy.random.uniform(-1, 1)
y = numpy.random.uniform(-1, 1)
if numpy.sqrt(x**2 + y**2) < 1:
inside += 1
p = inside / float(N)
print("Proportion inside: {}".format(p))
整个代码应该如下图所示,给出π的估计值为3.142......。
import numpy
N = 10_000
inside = 0
for i in range(N):
x = numpy.random.uniform(-1, 1)
y = numpy.random.uniform(-1, 1)
if numpy.sqrt(x**2 + y**2) < 1:
inside += 1
print(4*inside/float(N))
3.14
你可以在你的电脑上运行代码来练习。
实时应用
- 在不确定度分析中的应用
不确定性传播的一个好例子是计算BMI(身体质量指数)。BMI是身体质量/身体高度的比率。
让我们来看看这将如何工作。
问题
计算你的身体质量指数(BMI)和与之相关的不确定性区间,假设:根据你的体重计,你的体重为84公斤。你的身高在181和182厘米之间。
import numpy
from numpy.random import *
import matplotlib.pyplot as plt
N = 10_000
def BMI():
m = uniform(83.5, 84.5)
h = triangular(1.81, 1.815, 1.82)
return m / h**2
sim = numpy.zeros(N)
for i in range(N):
sim[i] = BMI()
plt.hist(sim)
蒙特卡洛的精确性
数学理论指出,蒙特卡洛估计技术的准确性应与所做试验次数的平方根成比例地增加。
为什么是蒙特卡洛?
当你重复一个实验数次时,大数法则就会发挥作用。
经过多次试验后,研究结果的平均值应该接近预期值。因此,如前所述,增加试验次数将提高准确性水平。
这表明,我们可以通过使用蒙特卡洛模拟在大量的试验中模拟随机变量的属性(平均值、方差、标准差等)。
为什么人们对蒙特卡洛说不
尽管蒙特卡洛方法的准确度很高,但人们仍然对这种方法说不,特别是在金融领域。他们选择了其他技术,如预测法。
以下是人们喜欢其他方法而不是蒙特卡洛的一些原因。
-
不可靠是这种方法的最大问题。
-
在不断发展的技术世界中,企业的财务计划不再依赖过去的经验或模式。
-
现实世界更依赖于未来的模式而不是过去发生的事情。
由于这些原因,财务顾问仍然反对这种在股票市场上日益流行的技术。在预测的损失比预测的要深的情况下,企业已经受到影响。
结论
蒙特卡洛模拟技术已被广泛用于不同领域的预测。风险分析是一个主要用途,它已被广泛采用。我们可能无法判断它的效率或准确性,这主要取决于过去的模式/数据。
我希望这篇文章对你有帮助。