- Python概率統計
- 李爽編著
- 2191字
- 2024-12-27 19:43:17
1.3 頻率與概率
本節介紹頻率和概率的定義和概率的性質。
1.3.1 頻率
人們在進行隨機試驗時,往往希望知道一個事件發生的可能性有多大,而且最好能用一個合適的數字表征它。為此,首先引入頻率的概念,在此基礎上,引入描述一個事件發生可能性大小的數字,也就是概率。
在相同試驗條件下,進行了n次試驗,在這n次試驗中事件A發生的次數為nA,則稱比值nA/n為事件A發生的頻率,一般記作fn(A)。顯然fn(A)具有下列性質:
(1)0≤fn(A)≤1。
(2)fn(S)=1。
(3)如果A1,A2,…,Ak是兩兩互不相容的事件,則

直觀上看,頻率越大的事件在一次試驗中發生的“可能性”越大,而且大量的試驗證實,當試驗次數n逐漸增大時,頻率fn(A)呈現出穩定性,逐漸趨近于某個常數。一般稱頻率穩定性為統計規律,依照此規律,讓試驗重復次數充分多,以頻率來表征某個事件發生的可能性是合適的。
例如,拋硬幣就是典型的隨機試驗,雖然拋硬幣試驗直觀上容易接受正反面出現可能性各占一半的結果,但確實有一批數學家做過拋硬幣試驗,見表1-1。這種嚴謹求實的科學精神令人欽佩,值得后人學習!
表1-1 拋硬幣試驗

拋硬幣模擬代碼如下:
#第1章/1-2.py import numpy as np #拋硬幣總次數 N = 10000 #0為反面, 1為正面 s = [0, 1] ex = np.random.choice(s, size = N, replace = True, p = [0.5, 0.5]) n = ex.sum() print('拋10000次, 正面朝上的次數為', n)
輸出如下:
拋10000次, 正面朝上的次數為4952
歷史上還有一個有名的隨機試驗,即蒲豐扔針試驗,這個試驗以別具一格的思想來估算圓周率π的值,并且開創了隨機模擬方法。1777年法國學者蒲豐提出用投針試驗求圓周率π。在平面上畫一些間距為a的平行線,向此平面隨機投擲一枚長為l(l<a)的針。針的位置可由針的中點與最近一條平行線的距離X及針與平行線的夾角φ來確定。隨機投針的概率含義是:針的中點與平行線的距離X均勻分布在[0,a/2]區間內;針與平行線的夾角φ均勻分布在[0,π]區間內,并且X與φ是相互獨立的。(由于尚未定義均勻分布、相互獨立的概念,姑且忽略)。顯然針與平行線相交的充分必要條件是:

故

利用投針試驗計算π值,設隨機投針N次,其中有M次與平行線相交。當N很大時,可以用頻率M/N作為概率p的估計值,從而求得π的估計值為

根據這個公式,歷史上有學者做了隨機投針試驗,他們所得到的π的估計值見表1-2。
表1-2 蒲豐扔針試驗

蒲豐隨機扔針試驗是隨機模擬方法的雛形。在計算機技術誕生以前進行大量的隨機試驗是十分困難的,隨著計算機的出現和發展,可以把真實的隨機投針試驗利用統計模擬試驗方法來代替,即用計算機實現隨機試驗。該方法有一個更新穎的名稱,即蒙特卡羅(Monte Carlo)方法。蒙特卡羅是摩納哥王國的城市,世界聞名的賭城。1946年數學家馮·諾依曼等在電子計算機上用隨機抽樣的方法模擬裂變物質的中子連鎖反應,由于這項研究與原子彈有關,需要保密,他們就把此方法以賭城的名字命名,稱為蒙特卡羅方法,既風趣又幽默,很快得到人們的普遍接受。從那以后出版的隨機模擬書籍也常用蒙特卡羅方法為題。
必須注意的是,計算機產生的所謂隨機數其實是偽隨機數,它們是利用數學方法按照一定的計算程序產生的數列,并不是真正意義上的隨機數。雖然如此,如果算法經過細心設計,可以產生看起來相互獨立的隨機數字,并且可以通過一系列的統計檢驗,就可以把這些偽隨機數當作隨機數來使用。
下面來看一個有趣的例子,用蒙特卡羅方法計算圓周率π的值。這種方法不同于蒲豐隨機扔針試驗,它更直觀一些。在平面上畫一個邊長為2的正方形,用程序生成一系列隨機的點,如圖1-1所示,假設有N個,這些點的橫坐標和縱坐標都是均勻分布的隨機數,作該正方形的內切圓,然后統計落入此內切圓中的點的個數,假設有M個,則有以下估計式:

利用估計式,可得π≈4M/N。

圖1-1 蒙特卡羅方法計算圓周率示意圖
蒙特卡羅方法計算圓周率的代碼如下:
#第1章/1-3.py import numpy as np #點的總數 N = 100000 #將(0, 1)區間的隨機數映射為-1到1 x = (np.random.rand(N) - 0.5) * 2 y = (np.random.rand(N) - 0.5) * 2 #統計落入圓周內的點的個數 M = 0 for k in range(N): if(x[k] ** 2 + y[k] ** 2 < = 1): M = M + 1 #結論 print('圓周率的近似值為', 4 * M/N)
輸出如下:
圓周率的近似值為3.1442
1.3.2 概率
在實際中,不可能對每個事件都做大量的試驗,然后求事件的頻率。為了研究需要,從頻率穩定性出發,給出表征事件可能性大小的概率的定義。
設E是隨機試驗,S是該隨機試驗的樣本空間,對于隨機事件A賦予一個實數P(A),稱P(A)為事件A的概率,如果P(A)滿足下面3個條件。
(1)非負性:對任何事件A,總有P(A)≥0。
(2)整體性:P(S)=1。
(3)可列可加性:對于兩兩互斥的事件A1,A2,A3,…,An,即Ai∩Aj=?(i≠j),有

由概率的定義,經過簡單的推導則可得概率的基本性質。
(1)P(?)=0。
(2)對任何事件A,有P(A)≤1。
(3)對任何事件A,有。
(4)對事件A和B,有P(A-B)=P(A)-P(A∩B)。如果B?A,則有P(A-B)=P(A)-P(B)。
概率有重要的加法公式。對于任意兩個事件A和B,有

如果是3個事件,不妨設為A1、A2和A3,則有

【例1-7】 設隨機事件A和B及其和事件A∪B的概率分別是0.4、0.3和0.6,若表示B的對立事件,求事件
的概率。
解:由P(A∪B)=P(A)+P(B)-P(AB)可知,P(AB)=0.4+0.3-0.6=0.1。又因為,故
。
【例1-8】 設A和B為兩個隨機事件,則P(A-B)等于( )。
A.P(A)-P(B)
B.P(B)P(A)-P(B)+P(A∩B)
C.P(A)-P(A∩B)
D.P(A)+P(B)-P(A∩B)
解:由P(A-B)=P(A)-P(A∩B)知,選(C)。
- Learning Cython Programming
- CentOS 7 Linux Server Cookbook(Second Edition)
- Visual Basic程序設計教程
- Mastering Python High Performance
- 教孩子學編程:C++入門圖解
- Kinect for Windows SDK Programming Guide
- Learn React with TypeScript 3
- Mastering Linux Network Administration
- 數據結構案例教程(C/C++版)
- .NET 3.5編程
- Mastering openFrameworks:Creative Coding Demystified
- R語言數據可視化:科技圖表繪制
- Java Web從入門到精通(第2版)
- Mastering Adobe Captivate 7
- Pandas 1.x Cookbook