本文转载自机器之心公众号,作者:Andre Ye,由机器之心编译。特此感谢!

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

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

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

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

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

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

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

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

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

import numpy as np
from tqdm import tqdm #Just a progress bar indicator#Number of randomized points to generate for each approximation
num_points = 250_000#Lists to store the radius and its corresponding area approximation
radii = []
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 circlein_circle = 0for i in range(num_points):#Generate an x and y coordinate from a uniform distribution bounded by a tangent boxxcoor = np.random.uniform(-radius,radius)ycoor = np.random.uniform(-radius,radius)#If the point is inside the circle, add one to in_circleif xcoor**2 + ycoor**2 < radius**2:in_circle += 1#Get the fraction of the points that were inside the circlearea_frac = in_circle/num_points#Append the approximated area and the radiusareas.append(area_frac*(4*(radius**2)))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 值(从而最大程度地降低平均绝对误差)。这一思路正是机器学习的核心原理——通过反复地推断、评估和修正,计算机可以「磨炼」出一套最优的参数。

coef = 0.1 #Initial coefficient value
learning_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 updown_coef = coef - learning_rate #Or move down#Store the predictions for a model using parameters up_coef and down_coefup_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 < up_coef_mae:#Set it equal to down_coefcoef = down_coef#Otherwise (moving the coefficient up yields a lower (better) or equal MAE:else:#Set it equal to up_coefcoef = up_coef

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

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

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

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

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

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

☟ 更多数学好书

不用任何数学方法,如何计算圆面积相关推荐

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

    杀鸡用牛刀,我们用机器学习方法来算圆的面积. 询问任何人圆的面积是多少,他们都会告诉你不就是r²吗.但如果你问他们为什么,他们很可能并不知道. 这是因为圆的面积公式的证明在大多数情况下要么不直观,不令 ...

  2. java使用蒙特卡罗方法计算半径为r圆的面积_不用微积分,如何计算圆面积

    选自medium 作者:Andre Ye 机器之心编译 机器之心编辑部 杀鸡用牛刀,我们用机器学习方法来算圆的面积. 询问任何人圆的面积是多少,他们都会告诉你不就是r²吗.但如果你问他们为什么,他们很 ...

  3. 积分上下限无穷_数学方法的思考和存在无穷多个孪生素数证明的思路

    高斯提出了素数定理, 但是没有证明,一百年后数学家雅克·阿达马与德拉瓦·莱普森,分别独立证 明了素数定理.他们用的是复分析及黎曼函数.此时大数学家哈代就指出" 对不起,素数定理没有初等证明& ...

  4. 数学建模学习笔记(2)不确定性数学方法

    发生之后可能会受到干扰的是不确定性数学方法  发生之后就能确定结果的是确定性数学方法 概率与随机数学 概率论(古典概型) 随机过程(受随机因素的影响) 马氏链模型 排队论与随机排队论(排队等待,流动周 ...

  5. 科学松鼠会压缩感知科普文章两篇:“压缩感知与单像素相机(陶哲轩)”“填补空白:用数学方法将低分辨率图像变成高分辨率图像(Jordan Ellenberg)

    题目:科学松鼠会压缩感知科普文章两篇:"压缩感知与单像素相机(陶哲轩)""填补空白:用数学方法将低分辨率图像变成高分辨率图像(Jordan Ellenberg)" ...

  6. 用数学方法计算井字棋合法局面数——波利亚定理的简单应用

    用数学方法计算井字棋合法局面数--波利亚定理的简单应用 0.前言 记不得那天在B站发现一个互动下井字棋智商普查(BV1JE411G71J),想当年被小学同学评价为无敌破战士(显然到现在都不知道这称号是 ...

  7. Python3破冰人工智能,你需要掌握一些数学方法

    为什么要把数学建模与当今火热的人工智能放在一起? 首先,数学建模在字面上可以分解成数学+建模,即运用统计学.线性代数和积分学等数学知识,构建算法模型,通过模型来解决问题.数学建模往往是没有对与错,只有 ...

  8. Linux/Ubuntu sudo不用输入密码的方法

    通常我们并不以root身份登录,但是当我们执行某些命令 (command)时需要用到root权限,我们通常都是用"sudo command"来执行command.由于使用Ubunt ...

  9. 如何不用 List.clear() 方法 就清空 list 中的 所有元素(中兴面试)

    import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.Lis ...

最新文章

  1. laravel conf/app.php
  2. 群晖挂pt 路由器虚拟服务器设置,群晖挂pt 路由器虚拟服务器设置
  3. 复习-网络编程之IP和端口号
  4. 数学专业下的计算机科学,被录取到信息与计算科学专业,这个专业什么性质,发展前景如何?...
  5. wifi驱动总结(2)
  6. 【Zookeeper】源码分析之Watcher机制(一)
  7. Mac OSX用终端检测文件的sha1值
  8. java入门第二季 答答租车系统
  9. GCD nyoj1007(欧拉函数运用数论入门)
  10. java向注册表单传递数据php_form表单传递数组数据、php脚本接收的实例
  11. php主页备案号底部中间,如何获取公安备案号?如何将公安备案号放到网站底部?...
  12. 无法从服务器获取视频文件,视频从云服务器获取视频文件
  13. 机器人导航,人工势场法的地图导航规划
  14. 在英伟达 jeason nano配置yolov5
  15. 弘辽电商主题四:淘宝店遇到恶意敲诈怎么办?客服应该如何应对?
  16. Linux网卡应用程序测试
  17. cmd package install-create -r -t -S returns error
  18. ubuntu 22.04下载wine及一些问题
  19. 数据库-Mysql-Ⅰ
  20. 软件测试工程师和WGT,三坐标和齿轮测量中心测齿轮的区别

热门文章

  1. python写界面输入测试脚本_python+Selenium自动化测试——输入,点击操作
  2. 字段变成小写 序列化_序列化/反序列化
  3. matlab中表示拉普拉斯分布_CHAPT1:场论;电磁学和微波学的基本的数学手段和表示...
  4. index match函数的使用方法_必学函数组合INDEX+MATCH,秒杀VLOOKUP函数
  5. centos7 nginx安装_手把手教你PHP(一) Centos7上的LEMP配置
  6. 用户查看订单信息php,php – 以编程方式获取用户刚刚在Ubercart中完成的订单
  7. ajax入门实例代码,AJAX、AJAX实例及AJAX源代码
  8. server 2008 中活动目录的迁移
  9. VMware猛涨vSphere价格 并减少版本数量
  10. 问题文件Android Studio 安装完成不能打开等问题解决记录