选自medium
机器之心编译
机器之心编辑部
杀鸡用牛刀,我们用机器学习方法来算圆的面积。
询问任何人圆的面积是多少,他们都会告诉你不就是r²吗。但如果你问他们为什么,他们很可能并不知道。
这是因为圆的面积公式的证明在大多数情况下要么不直观,不令人满意,要么充斥着积分等高级数学概念。
借鉴统计学习和机器学习的核心原理,我们可以使用蒙特卡罗模拟和多项式/二次回归来创建基于计算的方法,扇形的面积与圆的面积有什么关系,以找到圆的面积公式。,
在使用蒙特卡罗来近似圆的面积时,我们先生成一些随机坐标点 (x1,x2),这两个方向的坐标都是从负半径值到正半径值的均匀分布绘制得到的。我们在圆中放入 250,000 个这样的坐标点,如中心极限定理(或大数定律)所描述的,研究所用的真实随机样例点越多,得到的结果就会越准确。
π(a/2)²。a是正方形边长。方中圆的直径r等于正方形的边长,圆中方的对角线等于圆的直径(这两种情况都只用于圆与正方形的特殊情况)。设正方形边长为a,则圆的半径为a/2 圆的面积=π(a/
对于圆内的每一个点,我们可以引入一个落入圆内的点的数目的计数变量。在所有随机点都被投入之后,圆内的点数除以总点数(该研究中为 250,000)的值就代表在正方形内圆的面积所占的分数。该正方形的边长是圆的半径的两倍,因此正方形的面积是 4r²,其中 r 是圆的半径。用 4r²乘之前得到的分数,就得到了圆的面积。通过蒙特卡罗方法,可以非常接近地得到圆的真实面积而无需数学计算公式。
道理很简单,结果几乎完全正确!
import numpy as np
from tqdm import tqdm #Just a progress bar indicator
num_points = 250_000
radii = []
areas = []
for radius in tqdm(np.linspace(1,100,500)):
in_circle = 0
for i in range(num_points):
xcoor = np.random.uniform(-radius,radius)
圆的面积是(28.26)平方厘米 思路:拼成的长方形的长是原来圆的周长的一半,即πr,宽就是原来圆的半径r,根据题意得:πr-r=(π-1)r=6.42,那么,r=6.42÷(π-1)=3,所以,圆的面积=πr平方=3.
ycoor = np.random.uniform(-radius,radius)
if xcoor**2 + ycoor**2
in_circle += 1
area_frac = in_circle/num_points
areas.append(area_frac*(4*(radius**2)))
radii.append(radius)
模型参数:模型进行自动调整从而找到最佳参数,在这种情况下,参数为 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、2、圆的半径:r 直径:d 圆周率:π(数值为3.1415926至3.1415927之间……无限不循环小数),通常采用3.14作为π的数值 把圆平均分成若干份,可以拼成一个近似的长方形。长方形的宽就等于圆的半径。
coef = 0.1 #Initial coefficient value
learning_rate = 0.00001 39;learns'
iterations = 100000 39;practice and correct'
for i in tqdm(range(iterations)): #note - tqdm is just a progressbar
up_coef = coef + learning_rate #Move up
down_coef = coef - learning_rate #Or move down
up_pred = []
你好,很高兴回答你的问题 因为该圆的直径是5cm 所以半径是5÷2=2.5cm 所以圆的面积是 S=πr^2 S=3.14X2.5X2.5 S=19.625(平方厘米)
down_pred = []
for r in radii:
up_pred.append(up_coef*(r**2))
圆的面积公式是:圆周率乘以半径的平方,用字母可以表示为:S=πr²或S=π*(d/2)²。(s表示圆的面积,π表示圆周率3.1415926……,r表示半径,d表示直径)公式推导:圆周长(c):圆的直径(D),那圆。
down_pred.append(down_coef*(r**2))
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()
圆的面积公式是:S=πR²S表示圆的面积,π即圆周率“3.141592”,“R”表示半径。“R²”表示半径×半径。即:圆的面积=3.141592×半径×半径。
if down_coef_mae
coef = down_coef
else:
coef = up_coef
当我们查看训练的 coef 值时,可以看到它等于π:
print(str(coef)[:5]) #first four digits of coefficient (decimal point counts as a character)
[Output]: &39;
近年来,计算机已经接手开始解决复杂的高可变数学问题,计算圆面积只是其中的一个简单的示例。如果想要更复杂、更具开创性的,那当然是四色定理了(每个无外飞地的地图都可以用不多于四种颜色来染色,且不会有两个邻接的区域颜色相同)。这是第一个由计算机先生成证明,又被数学家广泛接受的成果。
借助计算机,人类可以探索以往无法尝试进入的,极其复杂的数学领域。