自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

不用任何數(shù)學(xué)方法,如何計算圓面積

開發(fā) 開發(fā)工具 機器學(xué)習(xí)
借鑒統(tǒng)計學(xué)習(xí)和機器學(xué)習(xí)的核心原理,我們可以使用蒙特卡羅模擬和多項式/二次回歸來創(chuàng)建基于計算的方法,以找到圓的面積公式。

殺雞用牛刀,我們用機器學(xué)習(xí)方法來算圓的面積。

詢問任何人圓的面積是多少,他們都會告訴你不就是𝜋r²嗎。但如果你問他們?yōu)槭裁?,他們很可能并不知道?/p>

這是因為圓的面積公式的證明在大多數(shù)情況下要么不直觀,不令人滿意,要么充斥著積分等高級數(shù)學(xué)概念。

借鑒統(tǒng)計學(xué)習(xí)和機器學(xué)習(xí)的核心原理,我們可以使用蒙特卡羅模擬和多項式/二次回歸來創(chuàng)建基于計算的方法,以找到圓的面積公式。

在不使用任何數(shù)學(xué)運算的情況下得出圓的面積,我們使用了蒙特卡羅方法。從探索不規(guī)則形狀的面積到預(yù)測股票市場的情況,都用到了蒙特卡羅方法。該方法的核心思想是引入隨機性,并測量系統(tǒng)對其作出的反饋,甚至可以在不了解系統(tǒng)原理的情況下獲得有效信息。

在使用蒙特卡羅來近似圓的面積時,我們先生成一些隨機坐標(biāo)點 (x1,x2),這兩個方向的坐標(biāo)都是從負(fù)半徑值到正半徑值的均勻分布繪制得到的。我們在圓中放入 250,000 個這樣的坐標(biāo)點,如中心極限定理(或大數(shù)定律)所描述的,研究所用的真實隨機樣例點越多,得到的結(jié)果就會越準(zhǔn)確。

對于圓內(nèi)的每一個點,我們可以引入一個落入圓內(nèi)的點的數(shù)目的計數(shù)變量。在所有隨機點都被投入之后,圓內(nèi)的點數(shù)除以總點數(shù)(該研究中為 250,000)的值就代表在正方形內(nèi)圓的面積所占的分?jǐn)?shù)。該正方形的邊長是圓的半徑的兩倍,因此正方形的面積是 4r²,其中 r 是圓的半徑。用 4r²乘之前得到的分?jǐn)?shù),就得到了圓的面積。通過蒙特卡羅方法,可以非常接近地得到圓的真實面積而無需數(shù)學(xué)計算公式。

道理很簡單,結(jié)果幾乎完全正確!

我們可以在給定半徑 r 的情況下找到任何圓的面積,但此時此刻我們還沒有歸納出圓的公式。為找到公式,我們需要創(chuàng)建一個二次方程式進(jìn)行建模,該方程式需要一個半徑并嘗試輸出面積。為了正確地擬合方程,我們必須為每個半徑的蒙特卡洛近似面積收集數(shù)據(jù)。

  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) 

而下一步就是寫一個擬合數(shù)據(jù)的二次項模型(回歸模型),y =ax²。我們可以通過繪圖驗證數(shù)據(jù)為二次項,而不是三階或四階多項式。從本質(zhì)上講,這是一個基礎(chǔ)的機器學(xué)習(xí)問題,因此再回顧一些基本術(shù)語:

  • 模型參數(shù):模型進(jìn)行自動調(diào)整從而找到最佳參數(shù),在這種情況下,參數(shù)為 a。如果具有 n 個參數(shù),則該模型被稱為 n 維。我們所使用的最基本模型是一維的,而對圖像進(jìn)行分類的深度神經(jīng)網(wǎng)絡(luò)有可能具有數(shù)百萬個維度。
  • 損失函數(shù):損失函數(shù)是對當(dāng)下模擬情況進(jìn)行評估,并希望找到可以得到最低誤差度的參數(shù)集,從而使得損失函數(shù)最小化。比如某個參數(shù)值 j 的損失函數(shù)值為 3,而參數(shù)值 k 的損失函數(shù)值為 2,則理應(yīng)選擇參數(shù)值 k。
  • 平均絕對誤差(MAE):我們將使用損失函數(shù)/錯誤度量,其原因是因為它易于使用且易于理解。給定當(dāng)前參數(shù)(a)和模型預(yù)測值,而平均絕對誤差是指預(yù)測值與真實值之間平均相差有多大,較低的 MAE 意味著模型更適合數(shù)據(jù)。
  • 學(xué)習(xí)率:為了優(yōu)化參數(shù),模型會在特定「方向」上逐漸調(diào)整參數(shù)。由于我們現(xiàn)在的模型僅優(yōu)化一個參數(shù)(a),因此僅需決定在一維平面上是增大或是減小參數(shù)值(任何變化都會產(chǎn)生較低的損失函數(shù))。而模型在調(diào)整過程中的移動量稱為學(xué)習(xí)率。較高的學(xué)習(xí)速度意味著模型有可能短時間內(nèi)就能得到一組效果較好的參數(shù),但無法保證其準(zhǔn)確度,而較低的學(xué)習(xí)率能夠獲得非常不錯的參數(shù),并且擁有較高的準(zhǔn)確度,唯一一點是需要大量的訓(xùn)練時間。

有了這些變量,我們可以構(gòu)建一個非?;A(chǔ)簡單的程序,使得它對這些數(shù)據(jù)擬合:

  • 把參數(shù) coef(a)初始化為 0.1。
  • 對于訓(xùn)練周期中的每次迭代:
  • 對 coef 提出兩條路徑;coef+lr 和 coef-lr,其中 lr 是學(xué)習(xí)率。
  • 對使用 coef=coef+lr 的模型和使用 coef=coef-lr 的模型評估平均絕對誤差。

將 coef 設(shè)置為等于 coef+lr 和 coef-lr 中平均絕對誤差值較小的那個數(shù)字。

通過對平均絕對誤差的反復(fù)優(yōu)化,模型最終將收斂出一個「最佳」的 coef 值(從而最大程度地降低平均絕對誤差)。這一思路正是機器學(xué)習(xí)的核心原理——通過反復(fù)地推斷、評估和修正,計算機可以「磨煉」出一套最優(yōu)的參數(shù)。

  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 

當(dāng)我們查看訓(xùn)練的 coef 值時,可以看到它等于π:

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

當(dāng)然,計算圓面積的公式很好記就是𝜋r²。無需使用微積分中的任何復(fù)雜的數(shù)學(xué)方法或其他證明,我們就能找到它的公式,并找到一種使用蒙特卡洛模擬和二次回歸找到𝜋值的方法。使用這種思路就可以找到計算圓面積的方法——當(dāng)然也可以找到任何圖形的面積計算公式——橢圓、心形、二維的烏龜形狀——只要參數(shù)可以說明它的輪廓。

近年來,計算機已經(jīng)接手開始解決復(fù)雜的高可變數(shù)學(xué)問題,計算圓面積只是其中的一個簡單的示例。如果想要更復(fù)雜、更具開創(chuàng)性的,那當(dāng)然是四色定理了(每個無外飛地的地圖都可以用不多于四種顏色來染色,且不會有兩個鄰接的區(qū)域顏色相同)。這是第一個由計算機先生成證明,又被數(shù)學(xué)家廣泛接受的成果。

借助計算機,人類可以探索以往無法嘗試進(jìn)入的,極其復(fù)雜的數(shù)學(xué)領(lǐng)域。

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

【本文是51CTO專欄機構(gòu)“機器之心”的原創(chuàng)譯文,微信公眾號“機器之心( id: almosthuman2014)”】 

戳這里,看該作者更多好文

 

責(zé)任編輯:趙寧寧 來源: 51CTO專欄
相關(guān)推薦

2019-05-24 08:55:34

5G標(biāo)準(zhǔn)網(wǎng)絡(luò)

2024-09-02 09:27:00

量子數(shù)學(xué)

2014-12-19 13:21:26

樹莓派Raspberry PWeave

2021-03-09 14:12:07

Java 框架定時

2024-05-24 11:38:17

SymPy計算運算

2013-04-16 10:02:47

cocos2d-x懶人Android開發(fā)

2009-09-16 08:39:15

LinuxUnix數(shù)學(xué)計算

2021-01-14 15:02:39

Windows 10投屏電腦

2013-06-18 10:11:33

云計算服務(wù)云計算云服務(wù)

2018-07-04 11:19:19

通信LoRa組網(wǎng)

2024-08-26 09:15:00

數(shù)學(xué)黑洞

2024-02-19 00:15:39

模型數(shù)據(jù)

2021-09-13 09:49:37

開發(fā)方程函數(shù)

2015-01-15 16:25:23

Android源碼Socket通信

2021-07-16 08:00:00

開發(fā)VSCode編輯器

2023-08-23 09:00:00

區(qū)塊鏈以太坊

2021-01-04 09:19:06

WindowsLinuxGUI程序

2020-11-09 10:00:33

Python開發(fā)

2022-03-10 10:14:11

LinuxKAlgebra圖形計算器

2018-07-02 16:28:06

Windows 10PC修復(fù)
點贊
收藏

51CTO技術(shù)棧公眾號