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

創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都做網(wǎng)站、成都網(wǎng)站建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的興國網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
詢問任何人圓的面積是多少,他們都會(huì)告訴你不就是????r2嗎。但如果你問他們?yōu)槭裁?,他們很可能并不知道?/p>
這是因?yàn)閳A的面積公式的證明在大多數(shù)情況下要么不直觀,不令人滿意,要么充斥著積分等高級(jí)數(shù)學(xué)概念。
借鑒統(tǒng)計(jì)學(xué)習(xí)和機(jī)器學(xué)習(xí)的核心原理,我們可以使用蒙特卡羅模擬和多項(xiàng)式/二次回歸來創(chuàng)建基于計(jì)算的方法,以找到圓的面積公式。
在不使用任何數(shù)學(xué)運(yùn)算的情況下得出圓的面積,我們使用了蒙特卡羅方法。從探索不規(guī)則形狀的面積到預(yù)測(cè)股票市場的情況,都用到了蒙特卡羅方法。該方法的核心思想是引入隨機(jī)性,并測(cè)量系統(tǒng)對(duì)其作出的反饋,甚至可以在不了解系統(tǒng)原理的情況下獲得有效信息。
在使用蒙特卡羅來近似圓的面積時(shí),我們先生成一些隨機(jī)坐標(biāo)點(diǎn) (x1,x2),這兩個(gè)方向的坐標(biāo)都是從負(fù)半徑值到正半徑值的均勻分布繪制得到的。我們?cè)趫A中放入 250,000 個(gè)這樣的坐標(biāo)點(diǎn),如中心極限定理(或大數(shù)定律)所描述的,研究所用的真實(shí)隨機(jī)樣例點(diǎn)越多,得到的結(jié)果就會(huì)越準(zhǔn)確。
對(duì)于圓內(nèi)的每一個(gè)點(diǎn),我們可以引入一個(gè)落入圓內(nèi)的點(diǎn)的數(shù)目的計(jì)數(shù)變量。在所有隨機(jī)點(diǎn)都被投入之后,圓內(nèi)的點(diǎn)數(shù)除以總點(diǎn)數(shù)(該研究中為 250,000)的值就代表在正方形內(nèi)圓的面積所占的分?jǐn)?shù)。該正方形的邊長是圓的半徑的兩倍,因此正方形的面積是 4r2,其中 r 是圓的半徑。用 4r2乘之前得到的分?jǐn)?shù),就得到了圓的面積。通過蒙特卡羅方法,可以非常接近地得到圓的真實(shí)面積而無需數(shù)學(xué)計(jì)算公式。
道理很簡單,結(jié)果幾乎完全正確!
我們可以在給定半徑 r 的情況下找到任何圓的面積,但此時(shí)此刻我們還沒有歸納出圓的公式。為找到公式,我們需要?jiǎng)?chuàng)建一個(gè)二次方程式進(jìn)行建模,該方程式需要一個(gè)半徑并嘗試輸出面積。為了正確地?cái)M合方程,我們必須為每個(gè)半徑的蒙特卡洛近似面積收集數(shù)據(jù)。
- 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 circle
- in_circle = 0
- for i in range(num_points):
- #Generate an x and y coordinate from a uniform distribution bounded by a tangent box
- xcoor = np.random.uniform(-radius,radius)
- ycoor = np.random.uniform(-radius,radius)
- #If the point is inside the circle, add one to in_circle
- if xcoor**2 + ycoor**2 < radius**2:
- in_circle += 1
- #Get the fraction of the points that were inside the circle
- area_frac = in_circle/num_points
- #Append the approximated area and the radius
- areas.append(area_frac*(4*(radius**2)))
- radii.append(radius)
而下一步就是寫一個(gè)擬合數(shù)據(jù)的二次項(xiàng)模型(回歸模型),y =ax2。我們可以通過繪圖驗(yàn)證數(shù)據(jù)為二次項(xiàng),而不是三階或四階多項(xiàng)式。從本質(zhì)上講,這是一個(gè)基礎(chǔ)的機(jī)器學(xué)習(xí)問題,因此再回顧一些基本術(shù)語:
- 模型參數(shù):模型進(jìn)行自動(dòng)調(diào)整從而找到最佳參數(shù),在這種情況下,參數(shù)為 a。如果具有 n 個(gè)參數(shù),則該模型被稱為 n 維。我們所使用的最基本模型是一維的,而對(duì)圖像進(jìn)行分類的深度神經(jīng)網(wǎng)絡(luò)有可能具有數(shù)百萬個(gè)維度。
- 損失函數(shù):損失函數(shù)是對(duì)當(dāng)下模擬情況進(jìn)行評(píng)估,并希望找到可以得到最低誤差度的參數(shù)集,從而使得損失函數(shù)最小化。比如某個(gè)參數(shù)值 j 的損失函數(shù)值為 3,而參數(shù)值 k 的損失函數(shù)值為 2,則理應(yīng)選擇參數(shù)值 k。
- 平均絕對(duì)誤差(MAE):我們將使用損失函數(shù)/錯(cuò)誤度量,其原因是因?yàn)樗子谑褂们乙子诶斫狻=o定當(dāng)前參數(shù)(a)和模型預(yù)測(cè)值,而平均絕對(duì)誤差是指預(yù)測(cè)值與真實(shí)值之間平均相差有多大,較低的 MAE 意味著模型更適合數(shù)據(jù)。
- 學(xué)習(xí)率:為了優(yōu)化參數(shù),模型會(huì)在特定「方向」上逐漸調(diào)整參數(shù)。由于我們現(xiàn)在的模型僅優(yōu)化一個(gè)參數(shù)(a),因此僅需決定在一維平面上是增大或是減小參數(shù)值(任何變化都會(huì)產(chǎn)生較低的損失函數(shù))。而模型在調(diào)整過程中的移動(dòng)量稱為學(xué)習(xí)率。較高的學(xué)習(xí)速度意味著模型有可能短時(shí)間內(nèi)就能得到一組效果較好的參數(shù),但無法保證其準(zhǔn)確度,而較低的學(xué)習(xí)率能夠獲得非常不錯(cuò)的參數(shù),并且擁有較高的準(zhǔn)確度,唯一一點(diǎn)是需要大量的訓(xùn)練時(shí)間。
有了這些變量,我們可以構(gòu)建一個(gè)非?;A(chǔ)簡單的程序,使得它對(duì)這些數(shù)據(jù)擬合:
- 把參數(shù) coef(a)初始化為 0.1。
- 對(duì)于訓(xùn)練周期中的每次迭代:
- 對(duì) coef 提出兩條路徑;coef+lr 和 coef-lr,其中 lr 是學(xué)習(xí)率。
- 對(duì)使用 coef=coef+lr 的模型和使用 coef=coef-lr 的模型評(píng)估平均絕對(duì)誤差。
將 coef 設(shè)置為等于 coef+lr 和 coef-lr 中平均絕對(duì)誤差值較小的那個(gè)數(shù)字。
通過對(duì)平均絕對(duì)誤差的反復(fù)優(yōu)化,模型最終將收斂出一個(gè)「最佳」的 coef 值(從而最大程度地降低平均絕對(duì)誤差)。這一思路正是機(jī)器學(xué)習(xí)的核心原理——通過反復(fù)地推斷、評(píng)估和修正,計(jì)算機(jī)可以「磨煉」出一套最優(yōu)的參數(shù)。
- 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 up
- down_coef = coef - learning_rate #Or move down
- #Store the predictions for a model using parameters up_coef and down_coef
- up_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_coef
- coef = down_coef
- #Otherwise (moving the coefficient up yields a lower (better) or equal MAE:
- else:
- #Set it equal to up_coef
- coef = up_coef
當(dāng)我們查看訓(xùn)練的 coef 值時(shí),可以看到它等于π:
- print(str(coef)[:5]) #first four digits of coefficient (decimal point counts as a character)
- [Output]: '3.141'
當(dāng)然,計(jì)算圓面積的公式很好記就是????r2。無需使用微積分中的任何復(fù)雜的數(shù)學(xué)方法或其他證明,我們就能找到它的公式,并找到一種使用蒙特卡洛模擬和二次回歸找到????值的方法。使用這種思路就可以找到計(jì)算圓面積的方法——當(dāng)然也可以找到任何圖形的面積計(jì)算公式——橢圓、心形、二維的烏龜形狀——只要參數(shù)可以說明它的輪廓。
近年來,計(jì)算機(jī)已經(jīng)接手開始解決復(fù)雜的高可變數(shù)學(xué)問題,計(jì)算圓面積只是其中的一個(gè)簡單的示例。如果想要更復(fù)雜、更具開創(chuàng)性的,那當(dāng)然是四色定理了(每個(gè)無外飛地的地圖都可以用不多于四種顏色來染色,且不會(huì)有兩個(gè)鄰接的區(qū)域顏色相同)。這是第一個(gè)由計(jì)算機(jī)先生成證明,又被數(shù)學(xué)家廣泛接受的成果。
借助計(jì)算機(jī),人類可以探索以往無法嘗試進(jìn)入的,極其復(fù)雜的數(shù)學(xué)領(lǐng)域。
本文標(biāo)題:不用任何數(shù)學(xué)方法,如何計(jì)算圓面積
本文路徑:http://www.5511xx.com/article/ccsdhhd.html


咨詢
建站咨詢
