第 112 天:机器学习算法之蒙特卡洛

简介: 第 112 天:机器学习算法之蒙特卡洛

大家听说过的算法,比如快速排序法、二分查找法,或是像梯度下降法、K 近邻算法,这些算法都有比较严格的逻辑要求,使用起来有些繁琐。


这里我们介绍一个很简单却又通常行之有效的算法:蒙特卡洛方法。严格来说,蒙特卡洛方法并不是特指某一种具体的算法,而是对遵循某种思想的算法的统称,应该是一“类”算法。


“在试验不变的条件下,重复试验多次,随机事件的频率近似于它的概率”,这个统计学规律在数学上被称作“大数定律”,也很符合我们的自然直观。蒙特卡洛方法正是在这个规律的指导下,应用随机手段来逼近一些难以直接求解的数值。


“蒙特卡洛方法”这个名称看起来奇奇怪怪的,其实当中的“蒙特卡洛”指的就是著名赌城蒙特卡洛,传闻是由于该方法的发明者之一乌拉姆的叔叔常在此处输钱而得名——不得不说这个命名确实是很随意哈哈。但是认真来说,赌博与概率/统计的学科发展相依相伴,贯穿始终,既是统计学的发源地,又是概率论的演练场,以赌城之名来命名这样一个完全依赖于随机性的方法,也果然是相得益彰,十分到位。


说到这里不得不提一嘴的是,同为著名赌城,拉斯维加斯也有自己的“冠名算法”,本文就不做详述了,感兴趣的同学可以自行了解。


1. 蒙特卡洛方法的原理


实际上之前我们已经提到过了,蒙特卡洛方法的有效性是建立在大数定律的基础上的,也就是说我们需要通过模拟这样一个不断重复的随机过程,来获得与正常的反复随机试验相同的结果,因此该方法也被称为“蒙特卡洛模拟法”。


随着实验次数(即随机样本)的增加,从统计学意义上来说,得到的结果会越来越精确,与正确结果的误差会越来越小。之所以说是“统计学意义上”,是因为这种方法并不保证 2001 次随机试验的结果一定比 2000 次随机试验的结果更加准确,甚至不能保证比 1 次实验的结果更准确;但总体来看,实验次数越多,得到的结果确实更加可信。


通过上面的分析我们可以看出,蒙特卡洛方法使用的场景是相对比较灵活的,并且更适合对数据的精度要求并不太严格的场合。一般来讲,工业领域的精度要求是完全可以被蒙特卡洛方法满足的。


2. 两个应用实例


这两个实例本质上是一样的


2.1 求 π 的值


凡讲到蒙特卡洛方法,这几乎都是一个必被提及的应用实例。


image.png


上图所示,阴影部分是一个半径为 1 的圆形,另有一个边长为 2 的正方形与之相切。

我们从小就知道,圆面积公式为:


其中,S1 为圆面积,r 为圆半径,π 则是一个常数。


正方形面积公式为:


其中,S2 为正方形面积,l 为正方形边长。


显然,对于特定的正方形,其内切圆的直径一定与正方形边长相等,也就是说圆半径是正方形边长的一半:。这样,我们只要再知道 S1 和 S2 的比值,就可以根据上面这两个面积公式求出 π 的具体数值了。


更进一步地,由于圆形和正方形都具有特殊的对称性,因此我们可以只考察一部分图形,同样可以得到相同的结果:


image.png


那么问题的关键就在于,这个比值到底应该怎么求呢?


方法有很多,最容易想到的就是对圆形求积分,得到对应的面积。对计算机来讲,我们可以返璞归真,用积分的思想,将图中这个扇形划分为大量小“矩形”,对小矩形面积求和即可得到扇形面积。


但是还有一种更加直接的方法。我们可以在图示的正方形中直接随机撒下一些点,然后统计落在扇形内部的点的个数,这个个数比上我们撒下的点的总个数,也就近似等于扇形面积与正方形面积之比。


image.png


结合上述分析,我们可以得到 π 值的计算式:


image.png


好了,铺垫了这么多,接下来让我们直接上代码:


>>> import random>>> REPEAT = 20000 # 实验次数>>> count = 0 # 用于记录落在扇形内部的随机点数>>> for i in range(REPEAT):...     x = random.random() # 生成[0.0, 1.0)区间内的均匀分布随机数...     y = random.random()...     if x*x + y*y < 1.0:...         count += 1...>>> ratio = count / REPEAT>>> PI = 4 * ratio>>> PI3.1388


可以看到,最后得到的 π 值与实际值是比较接近的。


2.2 求积分


同样地,在很多情境下,对于一些比较难以求出解析式的积分,或是即使知道解析式计算起来也比较麻烦的积分,我们并不需要一味地求出准确积分,而只需要通过蒙特卡洛方法得到一个粗糙的近似值即可,大大降低了计算的成本。


实际上,第一个例子的扇形面积可以从积分的角度考虑,而这个例子中的积分也同样可以从面积的角度考虑,二者本质上并无区别。


这里我们就以一个简单的积分为例,演示一下用蒙特卡洛方法求解积分的过程。


image.png


作图工具为 GeoGebra


图中所示函数为,所以应该等于 1/3,也就是 0.666… 。

放码过来看看:


import random
def solve_integral(repeat = 20000) -> float:    count = 0    for i in range(repeat):        x = random.random()        y = random.random()        if y > x*x:            count += 1
    ratio = count / repeat    integral = ratio * 1    return integral
if __name__ == "__main__":    repeat = int(input("请输入实验次数:"))    print(solve_integral(repeat))
# 请输入实验次数:500000# 0.666066


3. 总结


本文简单介绍了一种简单的随机算法——蒙特卡洛方法。这种方法看起来非常“低级”,没有太多的技术含量,但实际上却正体现出了一种简单之美,用概率的方法战胜了复杂的计算,反而十分优雅。


同时这种方法也十分灵活,可以应用于许多不同的领域,实现起来门槛也不高,读者可以另行探究。


参考资料


大数定律-百度百科

蒙特卡洛方法-维基百科

蒙特卡罗方法入门-阮一峰的网络日志

示例代码:Python-100-days



目录
相关文章
|
2月前
|
机器学习/深度学习 数据采集 人工智能
【机器学习算法篇】K-近邻算法
K近邻(KNN)是一种基于“物以类聚”思想的监督学习算法,通过计算样本间距离,选取最近K个邻居投票决定类别。支持多种距离度量,如欧式、曼哈顿、余弦相似度等,适用于分类与回归任务。结合Scikit-learn可高效实现,需合理选择K值并进行数据预处理,常用于鸢尾花分类等经典案例。(238字)
|
7月前
|
机器学习/深度学习 数据采集 人工智能
20分钟掌握机器学习算法指南
在短短20分钟内,从零开始理解主流机器学习算法的工作原理,掌握算法选择策略,并建立对神经网络的直观认识。本文用通俗易懂的语言和生动的比喻,帮助你告别算法选择的困惑,轻松踏入AI的大门。
|
8月前
|
机器学习/深度学习 存储 Kubernetes
【重磅发布】AllData数据中台核心功能:机器学习算法平台
杭州奥零数据科技有限公司成立于2023年,专注于数据中台业务,维护开源项目AllData并提供商业版解决方案。AllData提供数据集成、存储、开发、治理及BI展示等一站式服务,支持AI大模型应用,助力企业高效利用数据价值。
|
9月前
|
机器学习/深度学习 人工智能 自然语言处理
AI训练师入行指南(三):机器学习算法和模型架构选择
从淘金到雕琢,将原始数据炼成智能珠宝!本文带您走进数字珠宝工坊,用算法工具打磨数据金砂。从基础的经典算法到精密的深度学习模型,结合电商、医疗、金融等场景实战,手把手教您选择合适工具,打造价值连城的智能应用。掌握AutoML改装套件与模型蒸馏术,让复杂问题迎刃而解。握紧算法刻刀,为数字世界雕刻文明!
322 6
|
10月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于机器学习的人脸识别算法matlab仿真,对比GRNN,PNN,DNN以及BP四种网络
本项目展示了人脸识别算法的运行效果(无水印),基于MATLAB2022A开发。核心程序包含详细中文注释及操作视频。理论部分介绍了广义回归神经网络(GRNN)、概率神经网络(PNN)、深度神经网络(DNN)和反向传播(BP)神经网络在人脸识别中的应用,涵盖各算法的结构特点与性能比较。
|
11月前
|
机器学习/深度学习 人工智能 算法
机器学习算法的优化与改进:提升模型性能的策略与方法
机器学习算法的优化与改进:提升模型性能的策略与方法
1989 13
机器学习算法的优化与改进:提升模型性能的策略与方法
|
11月前
|
机器学习/深度学习 算法 网络安全
CCS 2024:如何严格衡量机器学习算法的隐私泄露? ETH有了新发现
在2024年CCS会议上,苏黎世联邦理工学院的研究人员提出,当前对机器学习隐私保护措施的评估可能存在严重误导。研究通过LiRA攻击评估了五种经验性隐私保护措施(HAMP、RelaxLoss、SELENA、DFKD和SSL),发现现有方法忽视最脆弱数据点、使用较弱攻击且未与实际差分隐私基线比较。结果表明这些措施在更强攻击下表现不佳,而强大的差分隐私基线则提供了更好的隐私-效用权衡。
274 14
|
9月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于贝叶斯优化的自适应马尔科夫链蒙特卡洛(Adaptive-MCMC)算法matlab仿真
本项目基于贝叶斯优化的自适应马尔科夫链蒙特卡洛(Adaptive-MCMC)算法,实现MATLAB仿真,并对比Kawasaki sampler、IMExpert、IMUnif和IMBayesOpt四种方法。核心在于利用历史采样信息动态调整MCMC参数,以高效探索复杂概率分布。完整程序在MATLAB2022A上运行,展示T1-T7结果,无水印。该算法结合贝叶斯优化与MCMC技术,通过代理模型和采集函数优化采样效率。
|
10月前
|
人工智能 编解码 算法
使用 PAI-DSW x Free Prompt Editing图像编辑算法,开发个人AIGC绘图小助理
使用 PAI-DSW x Free Prompt Editing图像编辑算法,开发个人AIGC绘图小助理
245 0
|
10月前
|
机器学习/深度学习 人工智能 自然语言处理
解锁机器学习的新维度:元学习的算法与应用探秘
元学习作为一个重要的研究领域,正逐渐在多个应用领域展现其潜力。通过理解和应用元学习的基本算法,研究者可以更好地解决在样本不足或任务快速变化的情况下的学习问题。随着研究的深入,元学习有望在人工智能的未来发展中发挥更大的作用。

热门文章

最新文章