三、隨機(jī)變量
原文:prob140/textbook/notebooks/ch03
譯者:飛龍
協(xié)議:CC BY-NC-SA 4.0
自豪地采用谷歌翻譯
許多數(shù)據(jù)科學(xué)涉及數(shù)值變量辩撑,它的觀察值取決于幾率宛渐。其他值提供的變量的預(yù)測(cè)值竞漾,隨機(jī)樣本中觀察到的不同類別個(gè)體的數(shù)量眯搭,以及自舉樣本的中值,僅僅是幾個(gè)例子业岁。 你在 Data8 中看到了更多例子鳞仙。
在概率論中,隨機(jī)變量是在結(jié)果空間上定義的數(shù)值函數(shù)笔时。 也就是說棍好,函數(shù)的定義域是Ω
,它的值域是實(shí)數(shù)行允耿。 隨機(jī)變量通常用靠后的字母表示借笙,如X
和Y
。
結(jié)果空間上的函數(shù)
隨機(jī)抽樣可以看做重復(fù)的隨機(jī)試驗(yàn)较锡,因此許多結(jié)果空間由序列組成业稼。代表硬幣投擲兩次的結(jié)果空間是:
如果你投擲 10 次,結(jié)果空間將包含 10 個(gè)元素的 210 個(gè)序列蚂蕴,其中每個(gè)元素是H
或T
低散。手動(dòng)列出結(jié)果比較痛苦,但計(jì)算機(jī)善于為我們避免這種痛苦骡楼。
乘積空間
兩個(gè)集合A
和B
的乘積是所有偶對(duì)(a, b)
的集合熔号,其中a ∈ A
和b ∈ B
。 這個(gè)概念正是我們需要的君编,用于描述代表多個(gè)試驗(yàn)的空間跨嘉。
例如,表示一枚硬幣投擲結(jié)果的空間是
(H, H), (H, T), (T, H), (T, T)
,你可以認(rèn)出這是硬幣投擲的結(jié)果兑燥。 這個(gè)新空間和 Python 模塊itertools
包含構(gòu)造乘積空間的函數(shù)product
降瞳。 讓我們導(dǎo)入它嘱支。
from itertools import product
要了解product
是如何工作的,我們將從投擲硬幣的結(jié)果開始挣饥。我們正在使用make_array
創(chuàng)建一個(gè)數(shù)組除师,但你可以使用任何其他方式創(chuàng)建數(shù)組或列表。
one_toss = make_array('H', 'T')
為了使用product
扔枫,我們必須指定基本空間和重復(fù)次數(shù)汛聚,然后將結(jié)果轉(zhuǎn)換為列表。
two_tosses = list(product(one_toss, repeat=2))
two_tosses
# [('H', 'H'), ('H', 'T'), ('T', 'H'), ('T', 'T')]
對(duì)于三次投擲短荐,只需改變重復(fù)次數(shù):
three_tosses = list(product(one_toss, repeat=3))
three_tosses
'''
[('H', 'H', 'H'),
('H', 'H', 'T'),
('H', 'T', 'H'),
('H', 'T', 'T'),
('T', 'H', 'H'),
('T', 'H', 'T'),
('T', 'T', 'H'),
('T', 'T', 'T')]
'''
概率空間是結(jié)果空間倚舀,帶有所有結(jié)果的概率叹哭。 如果假設(shè)三次投擲的八次結(jié)果是等可能的,則概率均為 1/8:
three_toss_probs = (1/8)*np.ones(8)
相應(yīng)的概率空間:
three_toss_space = Table().with_columns(
'omega', three_tosses,
'P(omega)', three_toss_probs
)
three_toss_space
omega | P(omega) |
---|---|
['H' 'H' 'H'] |
0.125 |
['H' 'H' 'T'] |
0.125 |
['H' 'T' 'H'] |
0.125 |
['H' 'T' 'T'] |
0.125 |
['T' 'H' 'H'] |
0.125 |
['T' 'H' 'T'] |
0.125 |
['T' 'T' 'H'] |
0.125 |
['T' 'T' 'T'] |
0.125 |
乘積空間增長得非澈勖玻快风罩。 如果你投擲 5 次,將會(huì)有近 8000 種可能的結(jié)果:
6**5
# 7776
但是我們有product
舵稠,所以我們?nèi)匀豢梢粤谐鏊谐朔e超升! 這是一個(gè)表示 5 次骰子投擲的概率空間。
die = np.arange(1, 7, 1)
five_rolls = list(product(die, repeat=5)) # All possible results of 5 rolls
five_roll_probs = (1/6**5)**np.ones(6**5) # Each result has chance 1/6**5
five_roll_space = Table().with_columns(
'omega', five_rolls,
'P(omega)', five_roll_probs
)
five_roll_space
omega | P(omega) |
---|---|
[1 1 1 1 1] |
0.000128601 |
[1 1 1 1 2] |
0.000128601 |
[1 1 1 1 3] |
0.000128601 |
[1 1 1 1 4] |
0.000128601 |
[1 1 1 1 5] |
0.000128601 |
[1 1 1 1 6] |
0.000128601 |
[1 1 1 2 1] |
0.000128601 |
[1 1 1 2 2] |
0.000128601 |
[1 1 1 2 3] |
0.000128601 |
[1 1 1 2 4] |
0.000128601 |
... (7766 rows omitted)
結(jié)果空間上的函數(shù)
假設(shè)你投擲一個(gè)骰子五次柱查,并將你看到的點(diǎn)數(shù)加起來廓俭。如果這看起來不清楚云石,請(qǐng)耐心等待一會(huì)兒唉工,你很快就會(huì)明白為什么它很有趣。
點(diǎn)數(shù)的總和是五個(gè)點(diǎn)數(shù)的結(jié)果空間Ω
上的數(shù)值函數(shù)汹忠。 總和是一個(gè)隨機(jī)變量淋硝。我們稱它為S
。然后宽菜,在形式上谣膳,
S
的范圍是 5 到 30 的整數(shù),因?yàn)槊總€(gè)骰子至少有一個(gè)點(diǎn)铅乡,最多六個(gè)點(diǎn)继谚。 我們也可以使用相同的符號(hào):
從計(jì)算的角度來看,Ω
的元素位于five_roll_space
的omega
列中阵幸。讓我們應(yīng)用這個(gè)函數(shù)并創(chuàng)建一個(gè)更大的表格花履。
five_rolls_sum = Table().with_columns(
'omega', five_rolls,
'S(omega)', five_roll_space.apply(sum, 'omega'),
'P(omega)', five_roll_probs
)
five_rolls_sum
omega | S(omega) | P(omega) |
---|---|---|
[1 1 1 1 1] |
5 | 0.000128601 |
[1 1 1 1 2] |
6 | 0.000128601 |
[1 1 1 1 3] |
7 | 0.000128601 |
[1 1 1 1 4] |
8 | 0.000128601 |
[1 1 1 1 5] |
9 | 0.000128601 |
[1 1 1 1 6] |
10 | 0.000128601 |
[1 1 1 2 1] |
6 | 0.000128601 |
[1 1 1 2 2] |
7 | 0.000128601 |
[1 1 1 2 3] |
8 | 0.000128601 |
[1 1 1 2 4] |
9 | 0.000128601 |
... (7766 rows omitted)
我們現(xiàn)在有五次投擲的所有可能的結(jié)果,以及它的總點(diǎn)數(shù)挚赊。你可以看到表格的第一行顯示了盡可能少的點(diǎn)數(shù)诡壁,對(duì)應(yīng)于所有投擲都顯示 1 點(diǎn)。 第 7776 行顯示了最大的:
five_rolls_sum.take(7775)
omega | S(omega) | P(omega) |
---|---|---|
[6 6 6 6 6] |
30 | 0.000128601 |
S
的所有其他值都在這兩個(gè)極端之間荠割。
隨機(jī)變量的函數(shù)
隨機(jī)變量是Ω
上的數(shù)值函數(shù)妹卿。 因此,通過復(fù)合蔑鹦,隨機(jī)變量的數(shù)值函數(shù)也是隨機(jī)變量夺克。
是一個(gè)隨機(jī)變量嚎朽,計(jì)算如下:
铺纽。
由S
確定的事件
從表five_rolls_sum
中,很難判斷有多少行顯示 6 或 10 或其他任何值火鼻。 為了更好地理解S
的屬性室囊,我們必須組織five_rolls_sum
中的信息雕崩。
對(duì)于S
中的任何子集A
,定義事件{S∈A}
為:
在特殊情況下嘗試這個(gè)定義融撞。令A = {5,30}
盼铁。 然后{S∈A}
,當(dāng)且僅當(dāng)所有點(diǎn)數(shù)都是 1 點(diǎn)或 6 點(diǎn)尝偎。 所以:
詢問總和是否為某個(gè)特定值的幾率是很自然的饶火,例如 10。讀取表格并不容易致扯,但我們可以訪問相應(yīng)的行:
five_rolls_sum.where('S(omega)', are.equal_to(10))
... (116 rows omitted)
S(ω)=10
的ω
有 126 個(gè)值肤寝。由于所有的ω
都相同,因此S
的值為 10 的幾率是 126/7776抖僵。
非正式情況下鲤看,我們通常會(huì)用符號(hào)表示,寫成{S = 10}
而不是{S∈{10}}
耍群。
分布
我們的空間是骰子的五次投擲的結(jié)果义桂,而我們的隨機(jī)變量S
是五次投擲的點(diǎn)數(shù)總數(shù)。
five_rolls_sum
omega | S(omega) | P(omega) |
---|---|---|
[1 1 1 1 1] |
5 | 0.000128601 |
[1 1 1 1 2] |
6 | 0.000128601 |
[1 1 1 1 3] |
7 | 0.000128601 |
[1 1 1 1 4] |
8 | 0.000128601 |
[1 1 1 1 5] |
9 | 0.000128601 |
[1 1 1 1 6] |
10 | 0.000128601 |
[1 1 1 2 1] |
6 | 0.000128601 |
[1 1 1 2 2] |
7 | 0.000128601 |
[1 1 1 2 3] |
8 | 0.000128601 |
[1 1 1 2 4] |
9 | 0.000128601 |
... (7766 rows omitted)
在最后一節(jié)中蹈垢,我們找到了P(S = 10)
慷吊。我們可以使用相同的過程,為每個(gè)可能的s
值查找P(S = s)
曹抬。group
方法允許我們?cè)谕粫r(shí)間為所有s
這樣做溉瓶。
為此,我們首先丟掉omega
列谤民。 然后堰酿,我們將按S(omega)
的不同值對(duì)表格進(jìn)行分組,并使用sum
來將每組中的所有概率相加赖临。
dist_S = five_rolls_sum.drop('omega').group('S(omega)', sum)
dist_S
S(omega) | P(omega) sum |
---|---|
5 | 0.000128601 |
6 | 0.000643004 |
7 | 0.00192901 |
8 | 0.00450103 |
9 | 0.00900206 |
10 | 0.0162037 |
11 | 0.0263632 |
12 | 0.0392233 |
13 | 0.0540123 |
14 | 0.0694444 |
... (16 rows omitted)
該表格顯示了所有可能的S
值及其所有概率胞锰。它被稱為S
的概率分布表。
表中的內(nèi)容 - 隨機(jī)變量的所有可能值及其所有概率 - 稱為S
的概率分布兢榨,或者簡(jiǎn)稱為S
的分布嗅榕。該分布顯示了 100% 的總概率如何分布在S
的所有可能值上。
讓我們來檢查一下吵聪,以確保結(jié)果空間中的所有ω
都已經(jīng)在概率一列中得到了解釋凌那。
dist_S.column(1).sum()
# 0.99999999999999911
它在計(jì)算環(huán)境中是 1。這是任何概率分布的一個(gè)特征:
分布的概率是非負(fù)的吟逝,總和為 1帽蝶。
展示分布
在 Data8 中,你使用datascience
庫來處理數(shù)據(jù)分布块攒。prob140
庫建立在它上面励稳,為處理概率分布和事件提供了一些便利的工具佃乘。
首先,我們將構(gòu)造一個(gè)概率分布對(duì)象驹尼,雖然它看起來非常像上面的表格趣避,但它的第二列中預(yù)計(jì)會(huì)有概率分布,并且如果它發(fā)現(xiàn)了其他任何東西新翎,就會(huì)報(bào)錯(cuò)程帕。
為了使代碼易于閱讀,讓我們以數(shù)組的形式分別提取可能的值和概率:
s = dist_S.column(0)
p_s = dist_S.column(1)
要將這些轉(zhuǎn)換為概率分布對(duì)象地啰,請(qǐng)從空表開始愁拭,然后使用表的values
和probability
方法。values
的參數(shù)是可能值的列表或數(shù)組亏吝,而probability
的參數(shù)是相應(yīng)概率的列表或數(shù)組岭埠。
dist_S = Table().values(s).probability(p_s)
dist_S
Value | Probability |
---|---|
5 | 0.000128601 |
6 | 0.000643004 |
7 | 0.00192901 |
8 | 0.00450103 |
9 | 0.00900206 |
10 | 0.0162037 |
11 | 0.0263632 |
12 | 0.0392233 |
13 | 0.0540123 |
14 | 0.0694444 |
... (16 rows omitted)
除了列標(biāo)簽更具可讀性之外,這看起來與我們之前的表完全相同顺呕。但是這是好處:在直方圖中展示分布枫攀,只需使用prob140
的Plot
方法括饶,如下株茶。
Plot(dist_S)
Plot
的注解
回想一下,
datascience
庫中的hist
顯示原始數(shù)據(jù)的直方圖图焰,包含在表格的列中启盛。prob140
庫中的Plot
顯示概率直方圖,基于概率分布作為輸入技羔。Plot
僅適用于概率分布對(duì)象僵闯,使用values
和probability
方法創(chuàng)建的。 它不適用于Table
類的普通成員藤滥。Plot
適用于具有整數(shù)值的隨機(jī)變量鳖粟。 你將在接下來的幾章中遇到的許多隨機(jī)變量是整數(shù)值。 為了展示其他隨機(jī)變量的分布拙绊,分箱決策更加復(fù)雜向图。
S
的分布的注解
在這里,五次投擲的點(diǎn)數(shù)總和的分布曲線出現(xiàn)了鐘形标沪。 注意這個(gè)直方圖和你在 Data 8 中看到的鐘形分布之間的差異榄攀。
這個(gè)顯示確切的分布。它是根據(jù)實(shí)驗(yàn)的所有可能結(jié)果進(jìn)行計(jì)算的金句。這不是一個(gè)近似值也不是一個(gè)經(jīng)驗(yàn)直方圖檩赢。
Data8 中的中心極限定理的表述表明,大型隨機(jī)樣本總和的分布大致是正態(tài)的违寞。但是在這里你看到的只是五次投擲的總和呈現(xiàn)鐘形分布贞瞒。如果你從均勻的分布開始(這是單次投擲的分布)偶房,那么在總和的概率分布變成正態(tài)之前,你不需要大型樣本军浆。
展示事件的概率
從 Data8 中可知蝴悉,鐘形曲線拐點(diǎn)之間的區(qū)間約占曲線面積的 68%。 雖然上面的直方圖并不完全是一個(gè)鐘形曲線 - 它是一個(gè)只有 26 個(gè)條形的離散直方圖 - 但它非常接近瘾敢。 拐點(diǎn)似乎大約是 14 和 21拍冠。
Plot
的event
參數(shù)可讓你可視化事件的概率,如下所示簇抵。
Plot(dist_S, event = np.arange(14, 22, 1))
金色區(qū)域是P(14 <= S <= 21)
庆杜。
prob_event
方法操作概率分布對(duì)象,來返回事件的概率碟摆。為了找到P(14 <= S <= 21)
晃财,請(qǐng)按如下所示使用它。
dist_S.prob_event(np.arange(14, 22, 1))
# 0.6959876543209863
幾率是 69.6%典蜕,離 68% 并不遠(yuǎn)断盛。
數(shù)學(xué)和代碼的對(duì)應(yīng)
P(14 <= S <= 21)
可以通過將事件劃分為 14 到 21 范圍內(nèi)的事件{S = s}
的并集,然后使用加法規(guī)則來找到愉舔。
請(qǐng)小心使用小寫字母s
作為通用可能值钢猛,與大寫字母S
作為隨機(jī)變量相對(duì)應(yīng);不這樣做會(huì)使公式含義非承停混亂命迈。
這意味著:
首先為 14 到 21 范圍內(nèi)的每個(gè)s
值抽取事件{S = s}
:
event_table = dist_S.where(0, are.between(14, 22))
event_table
Value | Probability |
---|---|
14 | 0.0694444 |
15 | 0.0837191 |
16 | 0.0945216 |
17 | 0.100309 |
18 | 0.100309 |
19 | 0.0945216 |
20 | 0.0837191 |
21 | 0.0694444 |
然后將所有這些事件的概率相加。
event_table.column('Probability').sum()
# 0.6959876543209863
prob_event
方法一步完成所有這些火的。 在這里再次進(jìn)行比較壶愤。
dist_S.prob_event(np.arange(14, 22, 1))
# 0.6959876543209863
你可以通過各種方式,使用相同的基本方法來查找由S
確定的任何事件的概率馏鹤。這里有兩個(gè)例子征椒。
一個(gè)查找數(shù)值的簡(jiǎn)便方法:
dist_S.prob_event(np.arange(20, 31, 1))
# 0.30516975308642047
示例 3:dist_S.prob_event(np.arange(4, 17, 1))
# 0.39969135802469169
相等性
我們知道兩個(gè)數(shù)字相等意味著什么。 然而湃累,隨機(jī)變量的相等可能不止一種勃救。
相同
如果相同結(jié)果空間上定義的兩個(gè)隨機(jī)變量X
和Y
的值,對(duì)于空間中的每個(gè)結(jié)果都是相同的脱茉,那么它們是相同的剪芥。符號(hào)X = Y
意味著
X
是10,那么Y
也必須是 10;如果X
是11益兄,Y
必須是 11锻梳,依此類推。
一個(gè)例子會(huì)把它說清楚净捅。 假設(shè) 国章。
同分布
如上所述具钥,然而,有一種感覺是四啰,正面數(shù)量與背面數(shù)量“以相同的方式出現(xiàn)”宁玫。兩個(gè)隨機(jī)變量具有相同的概率分布。
結(jié)果空間是three_tosses
:
coin = make_array('H', 'T')
three_tosses = list(product(coin, repeat=3))
three_tosses
'''
[('H', 'H', 'H'),
('H', 'H', 'T'),
('H', 'T', 'H'),
('H', 'T', 'T'),
('T', 'H', 'H'),
('T', 'H', 'T'),
('T', 'T', 'H'),
('T', 'T', 'T')]
'''
只有 8 個(gè)結(jié)果柑晒,因此很容易檢查上表并寫出 dist = Table().values(np.arange(4)).probability(make_array(1, 3, 3, 1)/8)
dist
Value | Probability |
---|---|
0 | 0.125 |
1 | 0.375 |
2 | 0.375 |
3 | 0.125 |
鱼鸠。
相等性之間的關(guān)系
相同比同分布更強(qiáng)猛拴。如果兩個(gè)隨機(jī)變量在結(jié)果層面上相同,那么它們必須具有相同的分布蚀狰,因?yàn)樗鼈冊(cè)诮Y(jié)果空間上是相同的函數(shù)愉昆。
也就是說,對(duì)于任意兩個(gè)隨機(jī)變量X
和Y
麻蹋,
但三次投擲的正面和反面的例子表明,反面不一定是正確的。
示例:來自小牌組的兩張牌
一個(gè)牌組包含 10 張牌芳室,分別標(biāo)記為1,2,2,3,3,3,4,4,4,4
专肪。兩張牌是不放回隨機(jī)發(fā)放的。讓
def prob1(i):
return i/10
然后禁悠,你可以像之前一樣念祭,使用value
創(chuàng)建一個(gè)概率分布對(duì)象,但現(xiàn)在使用probability_function
碍侦,它將函數(shù)的名稱作為其參數(shù):
possible_i = np.arange(1, 5, 1)
dist_X1 = Table().values(possible_i).probability_function(prob1)
dist_X1
Value | Probability |
---|---|
1 | 0.1 |
2 | 0.2 |
3 | 0.3 |
4 | 0.4 |
相信下面的函數(shù)prob2
會(huì)為每個(gè)i
返回P(X_2 = i)
粱坤。事件已根據(jù)
dist_X2 = Table().values(possible_i).probability_function(prob2)
dist_X2
Value | Probability |
---|---|
1 | 0.1 |
2 | 0.2 |
3 | 0.3 |
4 | 0.4 |
。