杀鸡用牛刀,我们用机器学习方法来算圆的面积。

询问任何人圆的面积是多少,他们都会告诉你不就是r²吗。但如果你问他们为什么,他们很可能并不知道。

这是因为圆的面积公式的证明在大多数情况下要么不直观,不令人满意,要么充斥着积分等高级数学概念。

借鉴统计学习和机器学习的核心原理,我们可以使用蒙特卡罗模拟和多项式/二次回归来创建基于计算的方法,以找到圆的面积公式。

在不使用任何数学运算的情况下得出圆的面积,我们使用了蒙特卡罗方法。从探索不规则形状的面积到预测股票市场的情况,都用到了蒙特卡罗方法。该方法的核心思想是引入随机性,并测量系统对其作出的反馈,甚至可以在不了解系统原理的情况下获得有效信息。

在使用蒙特卡罗来近似圆的面积时,我们先生成一些随机坐标点 (x1,x2),这两个方向的坐标都是从负半径值到正半径值的均匀分布绘制得到的。我们在圆中放入 250,000 个这样的坐标点,如中心极限定理(或大数定律)所描述的,研究所用的真实随机样例点越多,得到的结果就会越准确。

对于圆内的每一个点,我们可以引入一个落入圆内的点的数目的计数变量。在所有随机点都被投入之后,圆内的点数除以总点数(该研究中为 250,000)的值就代表在正方形内圆的面积所占的分数。该正方形的边长是圆的半径的两倍,因此正方形的面积是 4r²,其中 r 是圆的半径。用 4r²乘之前得到的分数,就得到了圆的面积。通过蒙特卡罗方法,可以非常接近地得到圆的真实面积而无需数学计算公式。

道理很简单,结果几乎完全正确!

我们可以在给定半径 r 的情况下找到任何圆的面积,但此时此刻我们还没有归纳出圆的公式。为找到公式,我们需要创建一个二次方程式进行建模,该方程式需要一个半径并尝试输出面积。为了正确地拟合方程,我们必须为每个半径的蒙特卡洛近似面积收集数据。

import numpy as npfrom tqdm import tqdm #Just a progress bar indicator#Number of randomized points to generate for each approximationnum_points = 250_000#Lists to store the radius and its corresponding area approximationradii = []areas = []#For each of the 500 equally spaced values between 1 and 100 inclusive:for radius in tqdm(np.linspace(1,100,500)):    #A counter for the number of points in the circle    in_circle = 0    for i in range(num_points):        #Generate an x and y coordinate from a uniform distribution bounded by a tangent box        xcoor = np.random.uniform(-radius,radius)        ycoor = np.random.uniform(-radius,radius)        #If the point is inside the circle, add one to in_circle        if xcoor**2 + ycoor**2 

而下一步就是写一个拟合数据的二次项模型(回归模型),y =ax²。我们可以通过绘图验证数据为二次项,而不是三阶或四阶多项式。从本质上讲,这是一个基础的机器学习问题,因此再回顾一些基本术语:

  • 模型参数:模型进行自动调整从而找到最佳参数,在这种情况下,参数为 a。如果具有 n 个参数,则该模型被称为 n 维。我们所使用的最基本模型是一维的,而对图像进行分类的深度神经网络有可能具有数百万个维度。
  • 损失函数:损失函数是对当下模拟情况进行评估,并希望找到可以得到最低误差度的参数集,从而使得损失函数最小化。比如某个参数值 j 的损失函数值为 3,而参数值 k 的损失函数值为 2,则理应选择参数值 k。
  • 平均绝对误差(MAE):我们将使用损失函数/错误度量,其原因是因为它易于使用且易于理解。给定当前参数(a)和模型预测值,而平均绝对误差是指预测值与真实值之间平均相差有多大,较低的 MAE 意味着模型更适合数据。
  • 学习率:为了优化参数,模型会在特定「方向」上逐渐调整参数。由于我们现在的模型仅优化一个参数(a),因此仅需决定在一维平面上是增大或是减小参数值(任何变化都会产生较低的损失函数)。而模型在调整过程中的移动量称为学习率。较高的学习速度意味着模型有可能短时间内就能得到一组效果较好的参数,但无法保证其准确度,而较低的学习率能够获得非常不错的参数,并且拥有较高的准确度,唯一一点是需要大量的训练时间。

有了这些变量,我们可以构建一个非常基础简单的程序,使得它对这些数据拟合:

  • 把参数 coef(a)初始化为 0.1。
  • 对于训练周期中的每次迭代:
  • 对 coef 提出两条路径;coef+lr 和 coef-lr,其中 lr 是学习率。
  • 对使用 coef=coef+lr 的模型和使用 coef=coef-lr 的模型评估平均绝对误差。
  • 将 coef 设置为等于 coef+lr 和 coef-lr 中平均绝对误差值较小的那个数字。

通过对平均绝对误差的反复优化,模型最终将收敛出一个「最佳」的 coef 值(从而最大程度地降低平均绝对误差)。这一思路正是机器学习的核心原理——通过反复地推断、评估和修正,计算机可以「磨炼」出一套最优的参数。

coef = 0.1 #Initial coefficient valuelearning_rate = 0.00001 #How fast the model 'learns'iterations = 100000 #How many times we want the model to 'practice and correct'for i in tqdm(range(iterations)): #note - tqdm is just a progressbar    #Propose two path for the coefficient:    up_coef = coef + learning_rate #Move up    down_coef = coef - learning_rate #Or move down    #Store the predictions for a model using parameters up_coef and down_coef    up_pred = []    down_pred = []    #For each radius value in the previously created list radii:    for r in radii:        #Append the model using up_coef's and down_coef's prediction (a*r^2)        up_pred.append(up_coef*(r**2))        down_pred.append(down_coef*(r**2))    #Find the MAE. Both are converted to NumPy arrays for easy operation.        up_coef_mae = np.abs(np.array([up_pred])-np.array([areas])).mean()    down_coef_mae = np.abs(np.array([down_pred])-np.array([areas])).mean()    #If moving the coefficient down yields a lower (better) MAE:        if down_coef_mae 

当我们查看训练的 coef 值时,可以看到它等于π:

print(str(coef)[:5]) #first four digits of coefficient (decimal point counts as a character)[Output]: '3.141'

当然,计算圆面积的公式很好记就是r²。无需使用微积分中的任何复杂的数学方法或其他证明,我们就能找到它的公式,并找到一种使用蒙特卡洛模拟和二次回归找到值的方法。使用这种思路就可以找到计算圆面积的方法——当然也可以找到任何图形的面积计算公式——椭圆、心形、二维的乌龟形状——只要参数可以说明它的轮廓。

近年来,计算机已经接手开始解决复杂的高可变数学问题,计算圆面积只是其中的一个简单的示例。如果想要更复杂、更具开创性的,那当然是四色定理了(每个无外飞地的地图都可以用不多于四种颜色来染色,且不会有两个邻接的区域颜色相同)。这是第一个由计算机先生成证明,又被数学家广泛接受的成果。

借助计算机,人类可以探索以往无法尝试进入的,极其复杂的数学领域。

机器学习实现计算不规则图形面积_不用任何数学方法,如何计算圆面积相关推荐

  1. 机器学习实现计算不规则图形面积_人教版小学数学五年级上册解决问题(不规则图形的面积)公开课优质课课件教案视频...

    1 小数乘法PPT课件教案下载_小学数学人教版五年级上册师梦圆​www.shimengyuan.com小数乘整数PPT课件教案下载_小学数学人教版五年级上册师梦圆​www.shimengyuan.co ...

  2. 机器学习实现计算不规则图形面积_谷歌开源 TensorFlow Graphics:专为 3D 图像打造的深度学习利器...

    Github 项目链接:https://github.com/tensorflow/graphics 最近几年以来,能够插入神经网络架构中的新型可区分图层在数量上有所增加.从空间转换器到可变图形渲染器 ...

  3. 机器学习实现计算不规则图形面积_《图形编程技术学习》(五十八)用VS实现逐顶点的光照计算...

    这个系列接近尾声了,自己也着急想早点弄完,最近忙着项目的事情,一连几天没有更新, 更新的时候遇到疑点也没有时间细细研究,大抵是囫囵吞枣,这种习惯很不好, 来得容易忘得也容易,到底是纸上得来终觉浅;想着 ...

  4. python求不规则图形面积_使用蒙特卡洛方法求解不规则图形的面积

    使用蒙特卡洛方法求解不规则图形的面积 周绪达 [摘 要] [摘 要]蒙特卡洛方法是一种以计算机为工具,通过抽样统计作为手 段的一种解决问题的方法,在许多领域都有广泛应用.论文基于蒙特卡洛方法, 利用 ...

  5. 不用任何数学方法,如何计算圆面积

    本文转载自机器之心公众号,作者:Andre Ye,由机器之心编译.特此感谢! 杀鸡用牛刀,我们用机器学习方法来算圆的面积. 询问任何人圆的面积是多少,他们都会告诉你不就是????r²吗.但如果你问他们 ...

  6. python计算图形面积的方法_python计算不规则图形面积算法

    https://www.xin3721.com/eschool/pythonxin3721/ 介绍:大三上做一个医学影像识别的项目,医生在原图上用红笔标记病灶点,通过记录红色的坐标位置可以得到病灶点的 ...

  7. python计算不规则图形面积_python opencv中的不规则形状检测和测量

    正如我在评论中提到的那样,对于这个问题,分水岭似乎是一个很好的方法.但是当你回答时,定义标记的前景和背景是困难的部分!我的想法是使用形态梯度沿着冰晶获得良好的边缘并从那里开始工作;形态梯度似乎很有效. ...

  8. 三位数除以两位数竖式计算没有余数_二年级数学第三十课:有余数的除法 例4 试商...

    二年级数学第三十课:有余数的除法 例4 试商 Spring is bound to come. 一.学习目标与重难点 学习目标: 1.通过计算引导学生探索有余数除法的想商试商方法,从计算中总结有余数除 ...

  9. pkpm板按弹性计算还是塑性_双向板按弹性方法还是按塑性方法计算

    双向板按弹性方法还是按塑性方法计算 茅老师您好!想请教您个问题,PKPM计算双向板时一般都是按弹性算吧,可我去年刚进设计院的时候有一个项目是按塑性算的,这样影响大不大啊,支座与跨中弯矩比值系数取得默认 ...

最新文章

  1. python 下载图片的集中方法
  2. CF572_Div2_D2
  3. [move_base-24] process has died [exit code -6, cmd lib/move_base/move_base odom:=mobile_base_control
  4. mysql事务和锁innodb,MySQL - InnoDB 锁与事务(三)隔离级别与表的关系
  5. maven如何直接手动下载jar包
  6. 使用 WinSCP 连接到 VCSA 6.5 失败并显示以下错误:收到的 SFTP 数据包过大
  7. ElasticSearch SQL 数据类型
  8. java Vector 在多线程使用中需要注意的问题
  9. 未来科技感UI界面设计欣赏
  10. [电影]推荐《启示》--完美的玛雅文化背景
  11. 抓取全网财经新闻,计算新闻相关股票的多空舆情,量化买入
  12. 修改C盘下的用户名(适合win10和win11)
  13. HTML动画XYZ轴的用法详解
  14. vscode中好用的git相关的插件
  15. GEEer成长日记十三:Landsat_SR计算地表温度时间序列
  16. 如何在海思平台启用dhcp server
  17. 7.4 Java(农夫果园【5】:一个农场,专门种植销售各类水果,在这个系统中需要描述下列水果葡萄、草莓、苹果)
  18. 计算机经常蓝屏可能的原因分析,计算机经常出现蓝屏的原因是什么
  19. 被VMP蹂躏了。。。
  20. java 授权对象初始化失败

热门文章

  1. torch.where用法
  2. python 多维 条件获取
  3. pybind11 入门
  4. Check failed: error == cudaSuccess (35 vs. 0) CUDA driver version is insufficient for CUDA runtime
  5. 一学即懂得计算机视觉
  6. java中引导页面的,Android实现欢迎引导页面
  7. java 监听map的数据_使用监听器:定时清除map缓存的key value .
  8. sql server 连接工具_SQL on file 工具
  9. mac环境下安装Gradle及配置
  10. 王者荣耀s15服务器维护,王者荣耀16日S15赛季更新内容