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

作者: 机器之心 2020-06-01 08:43:23

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

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

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

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

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

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

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

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

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

  1. import numpy as np 
  2. from tqdm import tqdm #Just a progress bar indicator 
  3.  
  4. #Number of randomized points to generate for each approximation 
  5. num_points = 250_000 
  6.  
  7. #Lists to store the radius and its corresponding area approximation 
  8. radii = [] 
  9. areas = [] 
  10.  
  11. #For each of the 500 equally spaced values between 1 and 100 inclusive: 
  12. for radius in tqdm(np.linspace(1,100,500)): 
  13.  
  14.     #A counter for the number of points in the circle 
  15.     in_circle = 0 
  16.  
  17.     for i in range(num_points): 
  18.  
  19.         #Generate an x and y coordinate from a uniform distribution bounded by a tangent box 
  20.         xcoor = np.random.uniform(-radius,radius) 
  21.         ycoor = np.random.uniform(-radius,radius) 
  22.  
  23.         #If the point is inside the circle, add one to in_circle 
  24.         if xcoor**2 + ycoor**2 < radius**2: 
  25.             in_circle += 1 
  26.  
  27.     #Get the fraction of the points that were inside the circle 
  28.     area_frac = in_circle/num_points 
  29.  
  30.     #Append the approximated area and the radius 
  31.     areas.append(area_frac*(4*(radius**2))) 
  32.     radii.append(radius) 

而下一步就是写一个拟合数据的二次项模型(回归模型),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 值(从而最大程度地降低平均绝对误差)。这一思路正是机器学习的核心原理——通过反复地推断、评估和修正,计算机可以「磨炼」出一套最优的参数。

  1. coef = 0.1 #Initial coefficient value 
  2. learning_rate = 0.00001 #How fast the model 'learns' 
  3. iterations = 100000 #How many times we want the model to 'practice and correct' 
  4.  
  5. for i in tqdm(range(iterations)): #note - tqdm is just a progressbar 
  6.  
  7.     #Propose two path for the coefficient: 
  8.     up_coef = coef + learning_rate #Move up 
  9.     down_coef = coef - learning_rate #Or move down 
  10.  
  11.     #Store the predictions for a model using parameters up_coef and down_coef 
  12.     up_pred = [] 
  13.     down_pred = [] 
  14.  
  15.     #For each radius value in the previously created list radii: 
  16.     for r in radii: 
  17.  
  18.         #Append the model using up_coef's and down_coef's prediction (a*r^2) 
  19.         up_pred.append(up_coef*(r**2)) 
  20.         down_pred.append(down_coef*(r**2)) 
  21.  
  22.     #Find the MAE. Both are converted to NumPy arrays for easy operation.     
  23.     up_coef_mae = np.abs(np.array([up_pred])-np.array([areas])).mean() 
  24.     down_coef_mae = np.abs(np.array([down_pred])-np.array([areas])).mean() 
  25.  
  26.     #If moving the coefficient down yields a lower (better) MAE:     
  27.     if down_coef_mae < up_coef_mae: 
  28.  
  29.         #Set it equal to down_coef 
  30.         coef = down_coef 
  31.  
  32.     #Otherwise (moving the coefficient up yields a lower (better) or equal MAE: 
  33.     else: 
  34.  
  35.         #Set it equal to up_coef 
  36.         coef = up_coef 

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

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

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

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

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

原文链接:https://medium.com/swlh/finding-the-formula-for-circle-area-without-using-any-math-898cbee70253

【本文是51CTO专栏机构“机器之心”的原创译文,微信公众号“机器之心( id: almosthuman2014)”】

戳这里,看该作者更多好文

机器学习 函数 模型
上一篇:人工智能的三大领域及其工业应用 下一篇:马云:机器不可能取代人类!那会取代什么呢?
评论
取消
暂无评论,快去成为第一个评论的人吧

更多资讯推荐

超20万人请愿,MIT哈佛将美国政府告上法庭!

近日的美移民局新规让美国各大顶尖高校炸了锅。今天就爆出,哈佛大学和麻省理工已经把政府告上法庭。

佚名 ·  2天前
机器学习变得越来越简单,软件工程却走向了相反的道路……

过去的5年里,机器学习变得越来越容易,机器学习工具也正在变得愈加“平民化”。而与此同时,软件工程却比以往更复杂了。然而,这对于软件工程师来说是件好事,但对于机器学习(ML)专家来说则不然。

读芯术 ·  2天前
如何用初中知识理解机器学习到底在干什么事情

机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。

Huoyo ·  2天前
如何在表格数据上使用特征提取进行机器学习

在本文中,我们将介绍如何使用特征提取对表格数据进行数据准备。特征提取为表格数据的数据准备提供了另一种方法,其中所有数据转换都并行应用于原始输入数据,并组合在一起以创建一个大型数据集。

湃绅Python ·  3天前
PyTorch官方教程书限时免费!500页内容带你上手最流行框架

去年 11 月,PyTorch 官方发布权威 PyTorch 教程书籍《Deep Learning with PyTorch》,现在经过更新迭代后,PyTorch 终于发布了该书的免费版本。还不快来学?

魔王 ·  3天前
机器学习项目完整搭建流程及任务清单曝光,值得收藏

对于创建机器学习项目,大部分人的印象都是数据、建模、测试等,但是具体的事项,以及要经过哪些步骤,估计99%的人都不知道,今天的内容就跟大家说说机器学习项目里,一定要做的几件事。

为AI呐喊 ·  4天前
想做项目但毫无头绪?试试这7个有趣的开源机器学习项目

做项目是学习机器学习的必经之路,而有趣又有价值的项目往往是可遇而不可求的。你是否还在为找不到合适的项目而发愁?

读芯术 ·  4天前
遍览200多个机器学习工具后,我学到了啥

这篇文章中,Chip小哥统计了两百多个机器学习相关工具,并且对整个该领域的发展和现状进行了回顾,同时列出机器学习开发的难点特别是和传统软件开发的不同点,最后还特意讨论了开源对该领域的影响。

大数据文摘 ·  4天前
Copyright©2005-2020 51CTO.COM 版权所有 未经许可 请勿转载