当前位置: 首页 > 科技观察

在没有任何数学方法的情况下,如何计算圆的面积

时间:2023-03-16 13:59:34 科技观察

是一个大锤。我们使用机器学习的方法来计算圆的面积。问任何人圆的面积是多少,他们会告诉你它是𝜋r2。但如果你问他们为什么,他们很可能不知道。这是因为在大多数情况下,圆的面积公式的证明要么不直观、不能令人满意,要么充斥着积分等高级数学概念。借鉴统计学习和机器学习的核心原理,我们可以使用蒙特卡洛模拟和多项式/二次回归来创建基于计算的方法来查找圆的面积公式。要在不使用任何数学的情况下找到圆的面积,我们使用蒙特卡洛方法。从探索不规则形状的区域到预测股票市场状况,蒙特卡洛方法无处不在。这种方法的核心思想是引入随机性,衡量系统对它的反馈,甚至可以在不知道系统原理的情况下获取有效信息。在使用蒙特卡洛近似圆的面积时,我们首先生成一些随机的坐标点(x1,x2),其中两个方向的坐标都是从负到正的半径值均匀分布得出的。我们将250,000个这样的坐标点放在圆圈中,正如中心极限定理(或大数定律)所描述的,研究使用的样本点越真实随机,结果就越准确。对于圆内的每个点,我们可以为落在圆内的点数引入一个计数变量。所有随机点都投入后,圆内的点数除以总点数(本研究中为250,000)表示正方形内的圆面积的分数。正方形的边长是圆半径的两倍,所以正方形的面积是4r2,其中r是圆的半径。将前面得到的分数乘以4r2得到圆的面积。通过蒙特卡洛方法,不需要数学计算公式就可以非常接近地求出圆的真实面积。原因很简单,结果也几乎完全正确!我们可以求出任意给定半径r的圆的面积,但是此时我们还没有对圆的公式进行推广。要找到公式,我们需要通过创建一个采用半径并尝试输出面积的二次方程来建模。为了正确地拟合方程,我们必须为每个半径的面积的蒙特卡洛近似收集数据。importnumpyasnpfromtqdmimporttqdm#Justaprogressbarindicator#Numberofrandomizedpointstogenerateforeachapproximationnum_points=250_000#Liststostoretheradiusanditscorrespondingareaapproximationradii=[]areas=[]#Foreachofthe500equallyspacedvaluesbetween1and100inclusive:forradiusintqdm(np.linspace(1,100,500)):#Acounterforthenumberofpointsinthecirclein_circle=0foriinrange(num_points):#Generateanxandycoordinatefromauniformdistributionboundedbyatangentboxxcoor=np.random.uniform(-radius,radius(*(radius**2)))radii.append(radius)下一步是编写一个拟合数据的二次项模型(回归模型),y=ax2。我们可以通过绘制数据是二次项而不是三阶或四阶多项式来验证。本质上,这是一个基本的机器学习问题,因此回顾一些基本术语:模型参数:模型会自动调整以找到最佳参数,在本例中为参数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=0.1#Initialcoefficientvaluelearning_rate=0.00001#Howfastthemodel'learns'iterations=100000#Howmanytimeswewantthemodelto'practiceandcorrect'foriintqdm(range(iterations)):#note-tqdmisjustaprogressbar#Proposetwopathforthecoefficient:up_coef=coef+learning_rate#Moveupdown_coef=coef-learning_rate#Ormovedown#Storethepredictionsforamodelusingparametersup_coefanddown_coefup_pred=[]down_pred=[]#Foreachradiusvalueinthepreviouslycreatedlistradii:forrinradii:#Appendthemodelusingup_coef'sanddown_coef'预测(a*r^2)up_pred.append(up_coef*(r**2))down_pred.append(down_coef*(r**2))#FindtheMAE.BothareconvertedtoNumPyarraysforeasyoperation.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()#Ifmovingthecoefficientdownyieldsalower(better)MAE:ifdown_coef_mae