詳解 概率機(jī)器人學(xué) 學(xué)習(xí)筆記及翻譯——第二章 概率 統(tǒng)計(jì)基礎(chǔ)(前半)
第二章 概率統(tǒng)計(jì)基礎(chǔ)_前半部分
本書的簡(jiǎn)介以及代碼倉(cāng)庫(kù)見(jiàn)
詳解 概率機(jī)器人學(xué) 學(xué)習(xí)筆記及翻譯
本章主要通過(guò)分析從機(jī)器人傳感器上取得的數(shù)據(jù),來(lái)過(guò)一邊概率論和數(shù)理統(tǒng)計(jì)的基礎(chǔ)知識(shí),以及說(shuō)明之后會(huì)用到的數(shù)學(xué)符號(hào)表記
代碼部分除了下載到自己電腦上運(yùn)行以外,也提供Google colab的在線版(一些變量會(huì)和windows下不同)
https://drive.google.com/file/d/1EDxX0pZHykXY30phkben8h5x0s-nKMVn/view?usp=sharing
2.1 收集數(shù)據(jù)和jupyter notebook上的準(zhǔn)備
收集傳感器數(shù)據(jù)
為了取得本章所用數(shù)據(jù)所進(jìn)行的實(shí)驗(yàn)方法
把機(jī)器人放在距離墻壁一個(gè)固定距離的位置上,每隔三秒記錄一次以下數(shù)據(jù),持續(xù)兩到三天
紅外線傳感器
LiDAR正面方向的數(shù)據(jù)

采取的數(shù)據(jù)全部放于代碼庫(kù)中sensor_data文件夾下,sensor_data_*.txt , *的部分是機(jī)器人與墻壁的距離(單位mm)
得到的數(shù)據(jù)
保存數(shù)據(jù)的格式為
日期 時(shí)間 紅外線傳感器數(shù)值 LiDAR數(shù)值
數(shù)據(jù)之間用空格來(lái)分隔 如下圖

可以在python中用pandas來(lái)這樣讀取數(shù)據(jù)

讀取完后比如想查看LiDAR的前5個(gè)數(shù)據(jù)的話

頻數(shù)分布和概率分布
讓我們分析一下這組數(shù)據(jù)中LiDAR的數(shù)據(jù)的規(guī)律
2.2.1 畫出直方圖

bins參數(shù)來(lái)決定橫軸的區(qū)間
因?yàn)長(zhǎng)iDAR數(shù)值只有整數(shù) 所以設(shè)置align來(lái)進(jìn)行左側(cè)對(duì)齊,避免直方圖中心在***.5的位置上
比較難說(shuō)明 可以自己把"left"改成"mid"試試看
2.2.2 頻數(shù) 噪音 偏差
剛剛畫出的直方圖中,橫軸是傳感器數(shù)值,縱軸是這個(gè)數(shù)值出現(xiàn)的頻數(shù)(也就是次數(shù))

從圖中可知:
數(shù)據(jù)范圍是194[mm]-226[mm]
210[mm]的頻數(shù)很高
離高頻數(shù)越遠(yuǎn)的地方頻數(shù)越低
另外因?yàn)闄C(jī)器人是筆者隨手放置的,并不是保證一定距離墻壁200[mm],加上LiDAR自身的基準(zhǔn)點(diǎn)不同,所以不用太在意為什么這里頻數(shù)最高的是200[mm]而不是200[mm]
我們應(yīng)該注意的是明明機(jī)器人沒(méi)有移動(dòng),但是傳感器的數(shù)據(jù)確是波動(dòng)的。產(chǎn)生波動(dòng)的原因可能是外部的光源,也可能是內(nèi)部的電壓 電流變化。
這樣的數(shù)值波動(dòng)被叫做噪音,數(shù)值和我們想測(cè)量的 [真正的] 數(shù)值的差就是誤差。因?yàn)樵胍舳a(chǎn)生的誤差被叫做偶然誤差(隨機(jī)誤差)
想要從根本上去除噪音是非常麻煩的,因?yàn)橐话闱闆r下都是會(huì)有好幾個(gè)原因相互作用下產(chǎn)生出的噪音。就算你調(diào)查出原因了,也不能保證一定能成功解決。
就算噪音全部去除了,也不能保證傳感器輸出的就是 [真正的] 數(shù)值。
比如LiDAR安裝的位置稍微移動(dòng)了,亦或是機(jī)器人自身有傾斜,都會(huì)造成數(shù)值的不正確
這種情況的數(shù)值變化被叫做偏差,由于偏差而產(chǎn)生的誤差被叫做系統(tǒng)誤差
2.2.3 噪音數(shù)值化
尋找噪音的原因并去除是一件很困難的事情。所以在這里我們先不去管產(chǎn)生噪音的原因是什么,先來(lái)看看噪音有沒(méi)有什么規(guī)律。[理解不了的東西就放著不管] 這種態(tài)度如果是在學(xué)習(xí)的時(shí)候可能是壞習(xí)慣,但是在概率 統(tǒng)計(jì)學(xué)里,這是一個(gè)好習(xí)慣。
這里我們先來(lái)計(jì)算一下傳感器數(shù)據(jù)的平均值,之后再算算方差以及標(biāo)準(zhǔn)偏差
對(duì)于LiDAR這組數(shù)據(jù),我們用下面的這個(gè)式子來(lái)表達(dá)

那么計(jì)算平均值的公式就應(yīng)該是

然后我們?cè)赑ython上算一下,可以直接計(jì)算 也可以用pandas的mean()函數(shù)
當(dāng)然 兩者的結(jié)果是一致的

接著在剛才的直方圖上把均值畫出來(lái)

接下來(lái)計(jì)算方差σ^2,方差有兩種 一種是樣本方差,定義是各值和均值的差的平方的平均值

一組數(shù)據(jù)的變化越大,方差也就越大
另一個(gè)則是把上式2.3中的N改為N-1的無(wú)偏方差

兩種方差在數(shù)據(jù)量小的的時(shí)候差別會(huì)很大,但是當(dāng)N=1000這種量級(jí)的時(shí)候,幾乎就沒(méi)什么差別了
在Python里面把這兩種方差都計(jì)算一下

pandas的var()函數(shù)默認(rèn)計(jì)算的式無(wú)偏方差,而numpy的var則是默認(rèn)計(jì)算樣本方差
接下來(lái),計(jì)算標(biāo)準(zhǔn)偏差,標(biāo)準(zhǔn)偏差是方差的正平方根

標(biāo)準(zhǔn)偏差能比方差更簡(jiǎn)單地說(shuō)明一組數(shù)據(jù)的離散程度。
比如我們這組數(shù)據(jù),就可以說(shuō)成?平均值是209.7[mm],標(biāo)準(zhǔn)偏差為4.8[mm]
寫成式子的話就是

2.2.4 (簡(jiǎn)單的)概率分布
現(xiàn)在我們來(lái)考慮一個(gè)問(wèn)題,我們已經(jīng)有了0~N-1的LiDAR的數(shù)據(jù),能不能以此來(lái)預(yù)測(cè)第N,N+1...的數(shù)據(jù)呢?如果在實(shí)驗(yàn)條件不變的情況下,看著圖2.3的直方圖,我們可以感覺(jué)到頻數(shù)大的那些數(shù)值很 [容易] 出現(xiàn)。而把這個(gè) [容易] 的程度給計(jì)算成數(shù)值,就是概率了。
要在這里完全說(shuō)明概率的定義的話有點(diǎn)太麻煩了,我們就先從這組LiDAR數(shù)據(jù)里面簡(jiǎn)單地考慮一下概率。簡(jiǎn)單地考慮即是說(shuō),在已有的N個(gè)數(shù)據(jù)里面某個(gè)數(shù)值z(mì)出現(xiàn)了m次,那么我們認(rèn)為z的概率P(z)=m/N
先來(lái)計(jì)算各個(gè)數(shù)值出現(xiàn)的頻數(shù)

接著追加一行概率,通過(guò)頻數(shù)除以數(shù)據(jù)個(gè)數(shù)來(lái)計(jì)算

來(lái)看看概率的總和是不是為1

通過(guò)計(jì)算出的數(shù)據(jù)我們可以畫出一張概率直方圖,橫軸是各個(gè)數(shù)值,縱軸則是數(shù)值出現(xiàn)的概率

這樣,把各個(gè)數(shù)值的P(z)給組合,描述整體P的變化的一個(gè)函數(shù),叫做概率質(zhì)量函數(shù)
并且被描述的這個(gè)變化的P,我們叫做概率分布,也就是上面那張直方圖
注意的是概率質(zhì)量函數(shù)是對(duì)離散的變量的定義,如果是連續(xù)變量的話,相應(yīng)的函數(shù)是后面會(huì)提到的概率密度函數(shù)
2.2.5 通過(guò)概率分布來(lái)進(jìn)行模擬仿真
計(jì)算出概率分布后,我們就可以通過(guò)代碼來(lái)模擬傳感器的數(shù)據(jù)輸出
本書之后會(huì)構(gòu)筑一個(gè)機(jī)器人模擬器,其中也會(huì)用到接下來(lái)的方法來(lái)模擬傳感器輸出
用這一段從0~N-1的數(shù)據(jù)里面,仿真第N個(gè)數(shù)據(jù)

通過(guò)pandas的sample函數(shù),設(shè)置權(quán)重weights="probs"也就是上面計(jì)算的概率分布,抽出n=1個(gè)數(shù)據(jù),其實(shí)直接使用這個(gè)sample函數(shù)權(quán)重設(shè)置為之前計(jì)算的頻數(shù)的話,不需要概率也可以達(dá)到同樣的效果,不過(guò)難得已經(jīng)算到概率 ,所以這里姑且就用概率來(lái)作為權(quán)重進(jìn)行抽樣。
這個(gè)處理,寫成式子的話就是

接著我們通過(guò)這個(gè)函數(shù),模擬采樣一萬(wàn)次來(lái)構(gòu)建一組數(shù)據(jù)
把得到的數(shù)據(jù)給畫成直方圖,可以看出和之前真實(shí)測(cè)量的數(shù)據(jù)基本上是一個(gè)形狀

2.3 概率模型
雖然上面我們通過(guò)圖2.3的數(shù)據(jù)來(lái)構(gòu)建了一個(gè)模擬函數(shù),但是這個(gè)模擬函數(shù)是 [完美] 的仿真函數(shù)嗎?
比如說(shuō),雖然圖2.3的數(shù)據(jù)里面,225這個(gè)數(shù)值確實(shí)為0,但是我們模擬采樣的P(225)=0這樣的結(jié)果也是正確的嗎?同樣的?P(300)=0?,P(1000)=0?這些結(jié)果也是正確的嗎?
對(duì)于這樣的疑問(wèn),恐怕大多數(shù)的人會(huì)這樣想
P(225)=0 不對(duì)勁
P(300)=0 也有點(diǎn)奇怪
P(1000)=0?沒(méi)問(wèn)題
為什么會(huì)有這樣的想法?大概是因?yàn)槲覀兺ㄟ^(guò) [常識(shí)] 來(lái)想象了一個(gè) [真正的概率分布的樣子]。
2.3.1 遵從正態(tài)分布
看到圖2.3這樣的形狀的時(shí)候,相信大多數(shù)稍微學(xué)過(guò)概率 統(tǒng)計(jì)的人,會(huì)覺(jué)得這組傳感器數(shù)據(jù)遵從正態(tài)分布。在這里我們先假定這是正確的,以它真的遵從正態(tài)分布為前提來(lái)討論后面的內(nèi)容。
雖然LiDAR只會(huì)返回整數(shù)數(shù)值是離散的,但是為了待會(huì)討論的方便 我們這里也假定它的輸出是一個(gè)連續(xù)值,也就是小數(shù)點(diǎn)以下 200.1 209.1234這樣的數(shù)據(jù)也有
正態(tài)分布的話,例如傳感器數(shù)值z(mì)大于a并且小于b的概率,用公式來(lái)表示的話為

這里面μ是平均值
式子的意思和性質(zhì)我們之后再說(shuō),這里先把之前計(jì)算的平均值以及方差帶入,畫出式子2.7以及2.8的變化曲線
式2.8可以用下面這個(gè)函數(shù)計(jì)算

接著我們對(duì)p積分,看看傳感器數(shù)值限定只有整數(shù)的時(shí)候的概率分布。
對(duì)傳感器數(shù)值整數(shù)x,做[x-0.5,x+0.5)區(qū)間的積分
不過(guò)因?yàn)槭?.8不是那么容易積分,所以這里我們用梯形公式來(lái)近似積分

和之前計(jì)算的概率分布圖做比較,正態(tài)分布的中央稍微高點(diǎn) 兩邊稍微矮點(diǎn) 不過(guò)大體上是一個(gè)形狀
正態(tài)分布是根據(jù)平均值以及方差來(lái)決定,可以用以下的式子來(lái)簡(jiǎn)易表示

像這樣為了描述某種概率分布的情況,用數(shù)式以及參數(shù)來(lái)表述的過(guò)程稱為模型化(建模),而其中的數(shù)學(xué)式子又被叫做概率模型。
2.3.2 概率密度函數(shù)
上一小節(jié)中用來(lái)畫圖的式2.8,是正態(tài)分布的概率密度函數(shù)(probability density function, pdf)。
因?yàn)閷?duì)概率密度函數(shù)的值進(jìn)行積分的話,就會(huì)得到概率,所以把這個(gè)函數(shù)的值稱為密度
假若一個(gè)值恰好是200,亦或是恰好是20.0000001,因?yàn)檫B續(xù)數(shù)字是無(wú)限可分的 所以恰好等于其中一個(gè)數(shù)字的概率約為0
因此在計(jì)算概率的時(shí)候要像式2.7那樣給出一個(gè)范圍。
這和計(jì)算物體的質(zhì)量是一個(gè)道理。假設(shè)我們從物體中拿出一點(diǎn)(空間坐標(biāo)中的一點(diǎn)),那么點(diǎn)的質(zhì)量為0。但如果取出的是物體的一塊的話,質(zhì)量就肯定不為0。用密度來(lái)解釋的話,假設(shè)某個(gè)物體各點(diǎn)x的密度為p(x),那么物體的某一部分A的質(zhì)量應(yīng)該是

在Python里計(jì)算正態(tài)分布的概率密度函數(shù)的時(shí)候,可以用SciPy,其中的stats模塊中的正態(tài)分布密度函數(shù)
我們利用這個(gè)函數(shù)重新計(jì)算一次

變量z是實(shí)數(shù)的時(shí)候,如果把概率密度分布p用下面的式子積分的話,就會(huì)得到累積分布函數(shù)(cumulative distribution function, cdf)

同樣的,stats模塊里面已經(jīng)有了正態(tài)分布的累積分布函數(shù),我們直接使用它來(lái)畫出函數(shù)曲線。從圖中可以看出,隨著x增大 數(shù)值漸漸接近于1

剛才我們用梯形公式來(lái)近似積分式2.7 ,但如果有累積分布函數(shù)的話 計(jì)算可以寫成這樣

這次來(lái)用式2.12重新計(jì)算一遍概率分布

多數(shù)場(chǎng)合會(huì)用P來(lái)表示概率質(zhì)量函數(shù),p來(lái)表示概率密度函數(shù)。但雙方都是表達(dá)概率分布的函數(shù),所以本書統(tǒng)稱其為 [概率分布] ,同時(shí)用 x ~ p,x ~ p(x)這樣的式子來(lái)表達(dá)從某個(gè)概率分布的數(shù)據(jù)中中隨機(jī)抽取一個(gè)數(shù)值
2.33 期望值
一個(gè)變量如果遵從某個(gè)概率分布,那便可以計(jì)算他的期望值
期望是,當(dāng)概率分布為P時(shí),從中無(wú)限取值 z~P(z),z的平均值
z是離散的時(shí)候 式子為

連續(xù)的時(shí)候 式子為

雖然這兩個(gè)定義式里 z是整數(shù)域或者實(shí)數(shù)域所有的數(shù)值,假若z有限定取值范圍 因?yàn)榉秶獾臄?shù)據(jù)都會(huì)P(z)=p(z)=0,所以定義式仍然是符合情況的
舉例來(lái)說(shuō)的話,丟骰子的期望值應(yīng)該為

一方面,按照定義 我們也可以盡量多丟骰子,通過(guò)計(jì)算平均值來(lái)求得期望的近似值

本書會(huì)用
來(lái)表示在概率分布p,P 下z的期望值
我們也可以更一般化,例如從z~p(z)計(jì)算的函數(shù)f(z) (應(yīng)該就是質(zhì)量密度函數(shù)?),那么這個(gè)函數(shù)的期望值應(yīng)為

同時(shí)函數(shù)的線性和的期望值,應(yīng)該等于 函數(shù)的期望值的線性和。 這點(diǎn)可以通過(guò)計(jì)算來(lái)驗(yàn)證

也就是說(shuō),期望值應(yīng)該是一個(gè)線性函數(shù)
假如p(z)是一個(gè)已知的分布模型,那么他的期望也是已知的。比如正態(tài)分布的場(chǎng)合,期望值就是分布的中心位置。

再來(lái)根據(jù)方差的定義,有
