計(jì)算與推斷思維 九、經(jīng)驗(yàn)分布

九、經(jīng)驗(yàn)分布

原文:Empirical Distributions

譯者:飛龍

協(xié)議:CC BY-NC-SA 4.0

自豪地采用谷歌翻譯

大部分?jǐn)?shù)據(jù)科學(xué)都涉及來自大型隨機(jī)樣本的數(shù)據(jù)。 在本節(jié)中,我們將研究這些樣本的一些屬性。

我們將從一個簡單的實(shí)驗(yàn)開始:多次擲骰子并跟蹤出現(xiàn)的點(diǎn)數(shù)。 die表包含骰子面上的點(diǎn)數(shù)。 所有的數(shù)字只出現(xiàn)一次,因?yàn)槲覀兗僭O(shè)骰子是平等的。

die = Table().with_column('Face', np.arange(1, 7, 1))
die
Face
1
2
3
4
5
6

概率分布

下面的直方圖幫助我們可視化,每個面出現(xiàn)概率為 1/6 事實(shí)。 我們說直方圖顯示了所有可能的面的概率分布。 由于所有的條形表示相同的百分比幾率,所以這個分布成為整數(shù) 1 到 6 上的均勻分布。

die_bins = np.arange(0.5, 6.6, 1)
die.hist(bins = die_bins)

https://gitee.com/wizardforcel/data8-textbook-zh/raw/master/img/9-1.png

遞增值由相同的固定量分隔,例如骰子面上的值(遞增值由 1 分隔),這樣的變量被稱為離散值。上面的直方圖被稱為離散直方圖。它的桶由數(shù)組die_bins指定,并確保每個條形的中心是對應(yīng)的整數(shù)值。

重要的是要記住,骰子不能顯示 1.3 個點(diǎn)或 5.2 個點(diǎn) - 總是顯示整數(shù)個點(diǎn)。但是我們的可視化將每個值的概率擴(kuò)展到條形區(qū)域。雖然在本課程的這個階段這看起來有些隨意,但是稍后當(dāng)我們在離散直方圖上疊加平滑曲線時,這將變得很重要。

在繼續(xù)之前,讓我們確保軸域上的數(shù)字是有意義的。每個面的概率是 1/6,四舍五入到小數(shù)點(diǎn)后兩位的概率是 16.67%。每個桶的寬度是 1 個單位。所以每個條形的高度是每單位 16.67%。這與圖形的水平和垂直比例一致。

經(jīng)驗(yàn)分布

上面的分布由每個面的理論概率組成。 這不基于數(shù)據(jù)。 不投擲任何骰子,它就可以被研究和理解。

另一方面,經(jīng)驗(yàn)分布是觀測數(shù)據(jù)的分布。 他們可以通過經(jīng)驗(yàn)直方圖可視化。

讓我們通過模擬一個骰子的投擲來獲得一些數(shù)據(jù)。 這可以通過 1 到 6 的整數(shù)的帶放回隨機(jī)抽樣來完成。為了使用 Python 來實(shí)現(xiàn),我們將使用Tablesample方法,它帶放回地隨機(jī)抽取表中的行。它的參數(shù)是樣本量,它返回一個由選定的行組成的表。 with_replacement=False的可選參數(shù)指定了應(yīng)該抽取樣本而不放回,但不適用于投擲骰子。

這是一個十次骰子投擲的結(jié)果。

die.sample(10)
Face
5
3
3
4
2
2
4
1
6
6

我們可以使用相同的方法來模擬盡可能多的投擲,然后繪制結(jié)果的經(jīng)驗(yàn)直方圖。 因?yàn)槲覀円磸?fù)這樣做,所以我們定義了一個函數(shù)empirical_hist_die,它以樣本量為參數(shù);該函數(shù)根據(jù)其參數(shù)多次投擲骰子,然后繪制直方圖。

def empirical_hist_die(n):
    die.sample(n).hist(bins = die_bins)

經(jīng)驗(yàn)直方圖

這是十次投擲的經(jīng)驗(yàn)直方圖。 它看起來不像上面的概率直方圖。 運(yùn)行該單元格幾次,看看它如何變化。

empirical_hist_die(10)

https://gitee.com/wizardforcel/data8-textbook-zh/raw/master/img/9-2.png

當(dāng)樣本量增加時,經(jīng)驗(yàn)直方圖開始看起來更像是理論概率的直方圖。

empirical_hist_die(100)

https://gitee.com/wizardforcel/data8-textbook-zh/raw/master/img/9-3.png

empirical_hist_die(1000)

https://gitee.com/wizardforcel/data8-textbook-zh/raw/master/img/9-4.png

當(dāng)我們增加模擬中的投擲次數(shù)時,每個條形的面積接近 16.67%,這是概率直方圖中每個條形的面積。

我們在實(shí)例中觀察到了一般規(guī)則:

平均定律

如果偶然的實(shí)驗(yàn)在相同的條件下獨(dú)立重復(fù),那么從長遠(yuǎn)來看,事件發(fā)生的頻率越來越接近事件的理論概率。

例如,從長遠(yuǎn)來看,四點(diǎn)的比例越來越接近 1/6。

這里“獨(dú)立地且在相同的條件下”意味著,無論所有其他重復(fù)的結(jié)果如何,每個重復(fù)都以相同的方式執(zhí)行。

從總體中取樣

當(dāng)隨機(jī)樣本來自較大總體時,平均定律也成立。

作為一個例子,我們將研究航班延誤時間的總體。 united表包含 2015 年夏天從舊金山出發(fā)的美聯(lián)航國內(nèi)航班的數(shù)據(jù)。數(shù)據(jù)由美國運(yùn)輸部運(yùn)輸統(tǒng)計(jì)局公布。

這里有 13,825 行,每行對應(yīng)一個航班。 列是航班日期,航班號,目的地機(jī)場代碼和以分鐘為單位的出發(fā)延誤時間。有些延誤時間是負(fù)的;那些航班提前離開。

united = Table.read_table('united_summer2015.csv')
united
Date Flight Number Destination Delay
6/1/15 73 HNL 257
6/1/15 217 EWR 28
6/1/15 237 STL -3
6/1/15 250 SAN 0
6/1/15 267 PHL 64
6/1/15 273 SEA -6
6/1/15 278 SEA -8
6/1/15 292 EWR 12
6/1/15 300 HNL 20
6/1/15 317 IND -10

(省略了 13815 行)

一個航班提前 16 分鐘起飛,另一個航班延誤 580 分鐘。 其他延遲時間幾乎都在 -10 分鐘到 200 分鐘之間,如下面的直方圖所示。

united.column('Delay').min()
-16

united.column('Delay').max()
580

delay_bins = np.append(np.arange(-20, 301, 10), 600)
united.select('Delay').hist(bins = delay_bins, unit = 'minute')

https://gitee.com/wizardforcel/data8-textbook-zh/raw/master/img/9-5.png

就本節(jié)而言,僅僅關(guān)注部分?jǐn)?shù)據(jù)就足夠了,我們忽略延遲超過 200 分鐘的 0.8% 的航班。 這個限制只是為了視覺便利。 該表仍然保留所有的數(shù)據(jù)。

united.where('Delay', are.above(200)).num_rows/united.num_rows
0.008390596745027125

delay_bins = np.arange(-20, 201, 10)
united.select('Delay').hist(bins = delay_bins, unit = 'minute')

https://gitee.com/wizardforcel/data8-textbook-zh/raw/master/img/9-6.png

[0,10)的條形高度不到每分鐘 3%,這意味著只有不到 30% 的航班延誤了 0 到 10 分鐘。 這是通過行的計(jì)數(shù)來確認(rèn)的:

united.where('Delay', are.between(0, 10)).num_rows/united.num_rows
0.2935985533453888

樣本的經(jīng)驗(yàn)分布

現(xiàn)在讓我們將這 13,825 個航班看做一個總體,并從中帶放回地抽取隨機(jī)樣本。 將我們的分析代碼打包成一個函數(shù)是有幫助的。 函數(shù)empirical_hist_delay以樣本量為參數(shù),繪制結(jié)果的經(jīng)驗(yàn)直方圖。

def empirical_hist_delay(n):
    united.sample(n).select('Delay').hist(bins = delay_bins, unit = 'minute')

正如我們用骰子所看到的,隨著樣本量的增加,樣本的經(jīng)驗(yàn)直方圖更接近于總體的直方圖。 將這些直方圖與上面的總體直方圖進(jìn)行比較。

empirical_hist_delay(10)

https://gitee.com/wizardforcel/data8-textbook-zh/raw/master/img/9-7.png

empirical_hist_delay(100)

https://gitee.com/wizardforcel/data8-textbook-zh/raw/master/img/9-8.png

最一致的可見差異在總體中罕見的值之中。 在我們的示例中,這些值位于分布的最右邊。 但隨著樣本量的增加,這些值以大致正確的比例,開始出現(xiàn)在樣本中。

empirical_hist_delay(1000)

https://gitee.com/wizardforcel/data8-textbook-zh/raw/master/img/9-9.png

樣本的經(jīng)驗(yàn)直方圖的總結(jié)

我們在本節(jié)中觀察到的東西,可以總結(jié)如下:

對于大型隨機(jī)樣本,樣本的經(jīng)驗(yàn)直方圖類似于總體的直方圖,概率很高。

這證明了,在統(tǒng)計(jì)推斷中使用大型隨機(jī)樣本是合理的。 這個想法是,由于大型隨機(jī)樣本可能類似于從中抽取的總體,從樣本中計(jì)算出的數(shù)量可能接近于總體中相應(yīng)的數(shù)量。

輪盤賭

上面的分布讓我們對整個隨機(jī)樣本有了印象。但有時候我們只是對基于樣本計(jì)算的一個或兩個量感興趣。

例如,假設(shè)樣本包含一系列投注的輸贏。那么我們可能只是對贏得的總金額感興趣,而不是輸贏的整個序列。

使用我們的幾率長期行為的新知識,讓我們探索賭博游戲。我們將模擬輪盤賭,它在拉斯維加斯和蒙特卡洛等賭場中受歡迎。

在內(nèi)華達(dá),輪盤賭的主要隨機(jī)器是一個帶有 38 個口袋的輪子。其中兩個口袋是綠色的,十八個黑色,十八個紅色。輪子在主軸上,輪子上有一個小球。當(dāng)輪子旋轉(zhuǎn)時,球體跳起來,最后落在其中一個口袋里。這就是獲勝的口袋。

wheel表代表內(nèi)華達(dá)輪盤賭的口袋。

wheel
Pocket Color
0 green
00 green
1 red
2 black
3 red
4 black
5 red
6 black
7 red
8 black

(省略了 28 行)

你可以對輪盤賭桌上展示的幾個預(yù)先指定的口袋下注。 如果你對“紅色”下注,如果球落在紅色的口袋里,你就贏了。

紅色的下注返回相等的錢。 也就是說,它支付一比一。為了理解這是什么意思,假設(shè)你在“紅色”下注一美元。 第一件事情發(fā)生之前,即使在車輪旋轉(zhuǎn)之前,你必須交出你的一美元。 如果球落在綠色或黑色的口袋里,你就失去它了。 如果球落在紅色的口袋里,你會把你的錢拿回來(讓你不輸不贏),再加上另外一美元的獎金。

函數(shù)red_winnings以一個顏色作為參數(shù),如果顏色是紅色,則返回1。 對于所有其他顏色,它返回-1。 我們將red_winnings應(yīng)用于wheelColor列,來獲得新的表bets,如果你對紅色下注一美元,它顯示每個口袋的凈收益。

def red_winnings(color):
    if color == 'red':
        return 1
    else:
        return -1
bets = wheel.with_column(
    'Winnings: Red', wheel.apply(red_winnings, 'Color')
    )
bets
Pocket Color Winnings: Red
0 green -1
00 green -1
1 red 1
2 black -1
3 red 1
4 black -1
5 red 1
6 black -1
7 red 1
8 black -1

(省略了 28 行)

假設(shè)我們決定對紅色下注一美元,會發(fā)生什么呢?

這里是一輪的模擬。

one_spin = bets.sample(1)
one_spin
Pocket Color Winnings: Red
14 red 1

這輪的顏色是Color列中的值。 無論你的賭注如何,結(jié)果可能是紅色,綠色或黑色。 要看看這些事件發(fā)生的頻率,我們可以模擬許多這樣的單獨(dú)輪次,并繪制出我們所看到的顏色的條形圖。 (我們可以稱之為經(jīng)驗(yàn)條形圖。)

為了實(shí)現(xiàn)它,我們可以使用for循環(huán)。 我們在這里選擇了重復(fù) 5000 次,但是當(dāng)你運(yùn)行這個單元格時,你可以改變它。

num_simulations = 5000

colors = make_array()
winnings_on_red = make_array()

for i in np.arange(num_simulations):
    spin = bets.sample(1)
    new_color = spin.column("Color").item(0)
    colors = np.append(colors, new_color)
    new_winnings = spin.column('Winnings: Red')
    winnings_on_red = np.append(winnings_on_red, new_winnings)

Table().with_column('Color', colors)\
       .group('Color')\
       .barh('Color')

https://gitee.com/wizardforcel/data8-textbook-zh/raw/master/img/9-10.png

38 個口袋里有 18 個是紅色的,每個口袋都是等可能的。 因此,在 5000 次模擬中,我們預(yù)計(jì)大致(但可能不是完全)看到18/38*5000或者 2,368 次紅色。模擬證明了這一點(diǎn)。

在模擬中,我們也記錄了你的獎金。 這些經(jīng)驗(yàn)直方圖顯示了,你對紅色下注的不同結(jié)果的(近似)幾率。

Table().with_column('Winnings: Red', winnings_on_red)\
       .hist(bins = np.arange(-1.55, 1.65, .1))

https://gitee.com/wizardforcel/data8-textbook-zh/raw/master/img/9-11.png

每個模擬的唯一可能的結(jié)果是,你贏了一美元或輸了一美元,這反映在直方圖中。 我們也可以看到,你贏的次數(shù)要比輸?shù)拇螖?shù)少一點(diǎn)。 你喜歡這個賭博策略嗎?

多次游戲

大多數(shù)輪盤賭玩家玩好幾輪。 假設(shè)你在 200 次獨(dú)立輪次反復(fù)下注一美元。 你總共會賺多少錢?

這里是一套 200 輪的模擬。 spins表包括所有 200 個賭注的結(jié)果。 你的凈收益是Winnings: Red列中所有 +1 和 -1 的和。

spins = bets.sample(200)
spins.column('Winnings: Red').sum()
-26

運(yùn)行幾次單元格。 有時你的凈收益是正的,但更多的時候它似乎是負(fù)的。

為了更清楚地看到發(fā)生了什么,讓我們多次模擬 200 輪,就像我們模擬一輪那樣。 對于每次模擬,我們將記錄來自 200 輪的總獎金。 然后我們將制作 5000 個不同的模擬總獎金的直方圖。

num_spins = 200

net_gain = make_array()

for i in np.arange(num_simulations):
    spins = bets.sample(num_spins)
    new_net_gain = spins.column('Winnings: Red').sum()
    net_gain = np.append(net_gain, new_net_gain)

Table().with_column('Net Gain on Red', net_gain).hist()

https://gitee.com/wizardforcel/data8-textbook-zh/raw/master/img/9-12.png

注意橫軸上 0 的位置。 這就是你不賺不賠的地方。 通過使用這個賭博策略,你喜歡這個賺錢幾率嗎?

如果對紅色下注不吸引人,也許值得嘗試不同的賭注。 “分割”(Split)是輪盤賭桌上兩個相鄰號碼的下注,例如 0 和 00。分割的回報是 17 比 1。

split_winnings函數(shù)將口袋作為參數(shù),如果口袋是 0 或 00,則返回 17。對于所有其他口袋,返回 -1。

表格more_bets是投注表格的一個版本,擴(kuò)展的一列是對 0/00 分割下注的情況下,每個口袋的獎金。

def split_winnings(pocket):
    if pocket == '0':
        return 17
    elif pocket == '00':
        return 17
    else:
        return -1
more_bets = wheel.with_columns(
    'Winnings: Red', wheel.apply(red_winnings, 'Color'),
    'Winnings: Split', wheel.apply(split_winnings, 'Pocket')
    )
more_bets
Pocket Color Winnings: Red Winnings: Split
0 green -1 17
00 green -1 17
1 red 1 -1
2 black -1 -1
3 red 1 -1
4 black -1 -1
5 red 1 -1
6 black -1 -1
7 red 1 -1
8 black -1 -1

(省略了 28 行)

下面的代碼模擬了兩個投注的結(jié)果 - 紅色和 0/00 分割 - 在 200 輪中。 代碼與以前的模擬相同,除了添加了 Split。 (注意:num_simulationsnum_spins之前分別定義為 5,000 和 200,所以我們不需要再次定義它們。)

net_gain_red = make_array()
net_gain_split = make_array()

for i in np.arange(num_simulations):
    spins = more_bets.sample(num_spins)
    new_net_gain_red = spins.column('Winnings: Red').sum()
    net_gain_red = np.append(net_gain_red, new_net_gain_red)
    new_net_gain_split = spins.column('Winnings: Split').sum()
    net_gain_split = np.append(net_gain_split, new_net_gain_split)

Table().with_columns(
    'Net Gain on Red', net_gain_red,
    'Net Gain on Split', net_gain_split
    ).hist(bins=np.arange(-200, 200, 20))

https://gitee.com/wizardforcel/data8-textbook-zh/raw/master/img/9-13.png

橫軸上 0 的位置表明,無論你選擇哪種賭注,你都更有可能賠錢而不是賺錢。在兩個直方圖中,不到 50% 的區(qū)域在 0 的右側(cè)。

然而,分割的賭注賺錢幾率更大,賺取超過 50 美元的機(jī)會也是如此。 金色直方圖有很多區(qū)域在五十美元的右側(cè),而藍(lán)色直方圖幾乎沒有。 那么你應(yīng)該對分割下注嗎?

這取決于你愿意承擔(dān)多少風(fēng)險,因?yàn)橹狈綀D還表明,如果你對分割下注,你比對紅色下注更容易損失超過 50 美元。

輪盤賭桌上,所有賭注的單位美元的預(yù)期凈損失相同(除了線注,這是更糟的)。 但一些賭注的回報比其他賭注更為可變。 你可以選擇這些賭注,只要你準(zhǔn)備好可能會大輸一場。

統(tǒng)計(jì)量的經(jīng)驗(yàn)分布

平均定律意味著,大型隨機(jī)樣本的經(jīng)驗(yàn)分布類似于總體的分布,概率相當(dāng)高。

在兩個直方圖中可以看到相似之處:大型隨機(jī)樣本的經(jīng)驗(yàn)直方圖很可能類似于總體的直方圖。

提醒一下,這里是所有美聯(lián)航航班延誤的直方圖,以及這些航班的大小為 1000 的隨機(jī)樣本的經(jīng)驗(yàn)直方圖。

united = Table.read_table('united_summer2015.csv')
delay_bins = np.arange(-20, 201, 10)
united.select('Delay').hist(bins = delay_bins, unit = 'minute')
plots.title('Population');

https://gitee.com/wizardforcel/data8-textbook-zh/raw/master/img/9-14.png

sample_1000 = united.sample(1000)
sample_1000.select('Delay').hist(bins = delay_bins, unit = 'minute')
plots.title('Sample of Size 1000');

https://gitee.com/wizardforcel/data8-textbook-zh/raw/master/img/9-15.png

兩個直方圖明顯相似,雖然他們并不等價。

參數(shù)

我們經(jīng)常對總體相關(guān)的數(shù)量感興趣。

在選民的總體中,有多少人會投票給候選人 A 呢?
在 Facebook 用戶的總體中,用戶最多擁有的 Facebook 好友數(shù)是多少?
在美聯(lián)航航班的總體中,起飛延誤時間的中位數(shù)是多少?

與總體相關(guān)的數(shù)量被稱為參數(shù)。 對于美聯(lián)航航班的總體,我們知道參數(shù)“延誤時間的中位數(shù)”的值:

np.median(united.column('Delay'))
2.0

NumPy 函數(shù)median返回?cái)?shù)組的中值(中位數(shù))。 在所有的航班中,延誤時間的中位數(shù)為 2 分鐘。 也就是說,總體中約有 50% 的航班延誤了 2 分鐘以內(nèi):

united.where('Delay', are.below_or_equal_to(2)).num_rows/united.num_rows
0.5018444846292948

一半的航班在預(yù)定起飛時間的 2 分鐘之內(nèi)起飛。 這是非常短暫的延誤!

注意。 由于“重復(fù)”,百分比并不完全是 50,也就是說,延誤了 2 分鐘的航班有 480 個。數(shù)據(jù)集中的重復(fù)很常見,我們不會在這個課程中擔(dān)心它。

united.where('Delay', are.equal_to(2)).num_rows
480

統(tǒng)計(jì)

在很多情況下,我們會感興趣的是找出未知參數(shù)的值。 為此,我們將依賴來自總體的大型隨機(jī)樣本的數(shù)據(jù)。

統(tǒng)計(jì)量(注意是單數(shù)!)是使用樣本中數(shù)據(jù)計(jì)算的任何數(shù)字。 因此,樣本中位數(shù)是一個統(tǒng)計(jì)量。

請記住,sample_1000包含來自united的 1000 個航班的隨機(jī)樣本。 樣本中位數(shù)的觀測值是:

np.median(sample_1000.column('Delay'))
2.0

我們的樣本 - 一千個航班 - 給了我們統(tǒng)計(jì)量的觀測值。 這提出了一個重要的推論問題:

統(tǒng)計(jì)量的數(shù)值可能會有所不同。 使用基于隨機(jī)樣本的任何統(tǒng)計(jì)量時,首先考慮的事情是,樣本可能不同,因此統(tǒng)計(jì)量也可能不同。

np.median(united.sample(1000).column('Delay'))
3.0

運(yùn)行單元格幾次來查看答案的變化。 通常它等于 2,與總體參數(shù)值相同。 但有時候不一樣。

統(tǒng)計(jì)量有多么不同? 回答這個問題的一種方法是多次運(yùn)行單元格,并記下這些值。 這些值的直方圖將告訴我們統(tǒng)計(jì)量的分布。

我們將使用for循環(huán)來“多次運(yùn)行單元格”。 在此之前,讓我們注意模擬中的主要步驟。

模擬統(tǒng)計(jì)量

我們將使用以下步驟來模擬樣本中位數(shù)。 你可以用任何其他樣本量來替換 1000 的樣本量,并將樣本中位數(shù)替換為其他統(tǒng)計(jì)量。

第一步:生成一個統(tǒng)計(jì)量。 抽取大小為 1000 的隨機(jī)樣本,并計(jì)算樣本的中位數(shù)。 注意中位數(shù)的值。

第二步:生成更多的統(tǒng)計(jì)值。 重復(fù)步驟 1 多次,每次重新抽樣。

第三步:結(jié)果可視化。 在第二步結(jié)束時,你將會記錄許多樣本中位數(shù),每個中位數(shù)來自不同的樣本。 你可以在表格中顯示所有的中位數(shù)。 你也可以使用直方圖來顯示它們 - 這是統(tǒng)計(jì)量的經(jīng)驗(yàn)直方圖。

我們現(xiàn)在執(zhí)行這個計(jì)劃。 正如在所有的模擬中,我們首先創(chuàng)建一個空數(shù)組,我們在其中收集我們的結(jié)果。

  • 上面的第一步是for循環(huán)的主體。
  • 第二步,重復(fù)第一步“無數(shù)次”,由循環(huán)完成。 我們“無數(shù)次”是5000次,但是你可以改變這個。
  • 第三步是顯示表格,并在后面的單元格中調(diào)用hist

該單元格需要大量的時間來運(yùn)行。 那是因?yàn)樗趫?zhí)行抽取大小為 1000 的樣本,并計(jì)算其中位數(shù)的過程,重復(fù) 5000 次。 這是很多抽樣和重復(fù)!

medians = make_array()

for i in np.arange(5000):
    new_median = np.median(united.sample(1000).column('Delay'))
    medians = np.append(medians, new_median)

Table().with_column('Sample Median', medians)
Sample Median
3
2
2
3
2
2
2
3
1
3

(省略了 4990 行)

Table().with_column('Sample Median', medians).hist(bins=np.arange(0.5, 5, 1))

https://gitee.com/wizardforcel/data8-textbook-zh/raw/master/img/9-16.png

你可以看到樣本中位數(shù)很可能接近 2,這是總體中位數(shù)的值。 由于 1000 次航班延誤的樣本可能與延誤總體相似,因此這些樣本的延誤中位數(shù)應(yīng)接近總體的延誤中位數(shù),也就不足為奇了。

這是一個例子,統(tǒng)計(jì)量如何較好估計(jì)參數(shù)。

模擬的威力

如果我們能夠生成所有可能的大小為 1000 的隨機(jī)樣本,我們就可以知道所有可能的統(tǒng)計(jì)量(樣本中位數(shù)),以及所有這些值的概率。我們可以在統(tǒng)計(jì)量的概率直方圖中可視化所有值和概率。

但在許多情況下(包括這個),所有可能的樣本數(shù)量足以超過計(jì)算機(jī)的容量,概率的純粹數(shù)學(xué)計(jì)算可能有些困難。

這是經(jīng)驗(yàn)直方圖的作用。

我們知道,如果樣本量很大,并且如果重復(fù)抽樣過程無數(shù)次,那么根據(jù)平均定律,統(tǒng)計(jì)量的經(jīng)驗(yàn)直方圖可能類似于統(tǒng)計(jì)量的概率直方圖。

這意味著反復(fù)模擬隨機(jī)過程是一種近似概率分布的方法,不需要在數(shù)學(xué)上計(jì)算概率,或者生成所有可能的隨機(jī)樣本。因此,計(jì)算機(jī)模擬成為數(shù)據(jù)科學(xué)中的一個強(qiáng)大工具。他們可以幫助數(shù)據(jù)科學(xué)家理解隨機(jī)數(shù)量的特性,這些數(shù)據(jù)會以其他方式進(jìn)行分析。

這就是這種的模擬的經(jīng)典例子。

估計(jì)敵軍飛機(jī)的數(shù)量

在第二次世界大戰(zhàn)中,為盟軍工作的數(shù)據(jù)分析師負(fù)責(zé)估算德國戰(zhàn)機(jī)的數(shù)量。 這些數(shù)據(jù)包括盟軍觀察到的德國飛機(jī)的序列號。 這些序列號為數(shù)據(jù)分析師提供了答案。

為了估算戰(zhàn)機(jī)總數(shù),數(shù)據(jù)分析人員必須對序列號做出一些假設(shè)。 這里有兩個這樣的假設(shè),大大簡化,使我們的計(jì)算更容易。

  • 戰(zhàn)機(jī)有N架,編號為 1,2, ..., N

  • 觀察到的飛機(jī)從N架飛機(jī)中均勻、隨機(jī)帶放回地抽取。

目標(biāo)是估計(jì)數(shù)字N。 這是未知的參數(shù)。

假設(shè)你觀察一些飛機(jī)并記下他們的序列號。 你如何使用這些數(shù)據(jù)來猜測N的值? 用于估計(jì)的自然和簡單的統(tǒng)計(jì)量,就是觀察到的最大的序列號。

讓我們看看這個統(tǒng)計(jì)量如何用于估計(jì)。 但首先是另一個簡化:現(xiàn)在一些歷史學(xué)家估計(jì),德國的飛機(jī)制造業(yè)生產(chǎn)了近 10 萬架不同類型的戰(zhàn)機(jī),但在這里我們只能想象一種。 這使得假設(shè) 1 更易于證明。

假設(shè)實(shí)際上有N = 300個這樣的飛機(jī),而且你觀察到其中的 30 架。 我們可以構(gòu)造一個名為serialno的表,其中包含序列號1N。 然后,我們可以帶放回取樣 30 次(見假設(shè) 2),來獲得我們的序列號樣本。 我們的統(tǒng)計(jì)量是這 30 個數(shù)字中的最大值。 這就是我們用來估計(jì)參數(shù)N的東西。

N = 300
serialno = Table().with_column('serial Number', np.arange(1, N+1))
serialno
serial number
1
2
3
4
5
6
7
8
9
10

(省略了 290 行)

serialno.sample(30).column(0).max()
291

與所有涉及隨機(jī)抽樣的代碼一樣,運(yùn)行該單元幾次;來查看變化。你會發(fā)現(xiàn),即使只有 300 個觀測值,最大的序列號通常在 250-300 范圍內(nèi)。

原則上,最大的序列號可以像 1 那樣小,如果你不幸看到了 30 次 1 號機(jī)。如果你至少觀察到一次 300 號機(jī),它可能會增大到 300。但通常情況下,它似乎處于非常高的 200 以上。看起來,如果你使用最大的觀測序列號作為你對總數(shù)的估計(jì),你不會有太大的錯誤。

模擬統(tǒng)計(jì)

讓我們模擬統(tǒng)計(jì),看看我們能否證實(shí)它。模擬的步驟是:

第一步。從 1 到 300 帶放回地隨機(jī)抽樣 30 次,并注意觀察到的最大數(shù)量。這是統(tǒng)計(jì)量。

第二步。重復(fù)步驟一 750 次,每次重新取樣。你可以用任何其他的大數(shù)值代替 750。

第三步。創(chuàng)建一個表格來顯示統(tǒng)計(jì)量的 750 個觀察值,并使用這些值繪制統(tǒng)計(jì)量的經(jīng)驗(yàn)直方圖。

sample_size = 30
repetitions = 750
maxes = make_array()

for i in np.arange(repetitions):
    sampled_numbers = serialno.sample(sample_size)
    maxes = np.append(maxes, sampled_numbers.column(0).max())  

Table().with_column('Max Serial Number', maxes)
Max Serial Number
280
253
294
299
298
237
296
297
293
295

(省略了 740 行)

every_ten = np.arange(1, N+100, 10)
Table().with_column('Max Serial Number', maxes).hist(bins = every_ten)

https://gitee.com/wizardforcel/data8-textbook-zh/raw/master/img/9-17.png

這是 750 個估計(jì)值的直方圖,每個估計(jì)值是統(tǒng)計(jì)量“觀察到的最大序列號”的觀測值。

正如你所看到的,盡管在理論上它們可能會小得多,但估計(jì)都在 300 附近。直方圖表明,作為飛機(jī)總數(shù)的估計(jì),最大的序列號可能低了大約 10 到 25 個。但是,飛機(jī)的真實(shí)數(shù)量低了 50 個是不太可能的。

良好的近似

我們前面提到過,如果生成所有可能的樣本,并計(jì)算每個樣本的統(tǒng)計(jì)量,那么你將準(zhǔn)確了解統(tǒng)計(jì)量可能有多么不同。事實(shí)上,你將會完整地列舉統(tǒng)計(jì)量的所有可能值及其所有概率。

換句話說,你將得到統(tǒng)計(jì)量的概率分布和概率直方圖。

統(tǒng)計(jì)量的概率分布也稱為統(tǒng)計(jì)量的抽樣分布,因?yàn)樗谒锌赡艿臉颖尽?/p>

但是,我們上面已經(jīng)提到,可能的樣本總數(shù)往往非常大。例如,如果有 300 架飛機(jī),你可以看到的,30 個序列號的可能序列總數(shù)為:

300**30
205891132094649000000000000000000000000000000000000000000000000000000000000

這是很多樣本。 幸運(yùn)的是,我們不必生成所有這些。 我們知道統(tǒng)計(jì)量的經(jīng)驗(yàn)直方圖,基于許多但不是全部可能的樣本,是概率直方圖的很好的近似。 因此統(tǒng)計(jì)量的經(jīng)驗(yàn)分布讓我們很好地了解到,統(tǒng)計(jì)量可能有多么不同。

確實(shí),統(tǒng)計(jì)量的概率分布包含比經(jīng)驗(yàn)分布更準(zhǔn)確的統(tǒng)計(jì)量信息。 但是,正如在這個例子中一樣,通常經(jīng)驗(yàn)分布所提供的近似值,足以讓數(shù)據(jù)科學(xué)家了解統(tǒng)計(jì)量可以變化多少。 如果你有一臺計(jì)算機(jī),經(jīng)驗(yàn)分布更容易計(jì)算。 因此,當(dāng)數(shù)據(jù)科學(xué)家試圖理解統(tǒng)計(jì)的性質(zhì)時,通常使用經(jīng)驗(yàn)分布而不是精確的概率分布。

參數(shù)的不同估計(jì)

這里舉一個例子來說明這一點(diǎn)。 到目前為止,我們已經(jīng)使用了最大的觀測序號作為飛機(jī)總數(shù)的估計(jì)。 但還有其他可能的估計(jì),我們現(xiàn)在將考慮其中之一。

這個估計(jì)的基本思想是觀察到的序列號的平均值可能在1到N之間。 因此,如果A是平均值,那么:

https://www.zhihu.com/equation?tex=A%20%7E%20%5Capprox%20%7E%20%5Cfrac%7BN%7D%7B2%7D%20%7E%7E%7E%20%5Cmbox%7Band%20so%7D%20%7E%7E%7E%20N%20%5Capprox%202A

因此,可以使用一個新的統(tǒng)計(jì)量化來估計(jì)飛機(jī)總數(shù):取觀測到的平均序列號并加倍。

與使用最大的觀測數(shù)據(jù)相比,這種估計(jì)方法如何? 計(jì)算新統(tǒng)計(jì)量的概率分布并不容易。 但是和以前一樣,我們可以模擬它來近似得到概率。 我們來看看基于重復(fù)抽樣的統(tǒng)計(jì)量的經(jīng)驗(yàn)分布。 為了便于比較,重復(fù)次數(shù)選擇為 750,與之前的模擬相同。

maxes = make_array()
twice_ave = make_array()

for i in np.arange(repetitions):
    sampled_numbers = serialno.sample(sample_size)

    new_max = sampled_numbers.column(0).max()
    maxes = np.append(maxes, new_max)

    new_twice_ave = 2*np.mean(sampled_numbers.column(0))
    twice_ave = np.append(twice_ave, new_twice_ave)


results = Table().with_columns(
    'Repetition', np.arange(1, repetitions+1),
    'Max', maxes,
    '2*Average', twice_ave
)

results
Repetition Max 2*Average
1 296 312.067
2 283 290.133
3 290 250.667
4 296 306.8
5 298 335.533
6 281 240
7 300 317.267
8 295 322.067
9 296 317.6
10 299 308.733

(省略了 740 行)

請注意,與所觀察到的最大數(shù)字不同,新的估計(jì)值(“平均值的兩倍”)可能會高估飛機(jī)的數(shù)量。 當(dāng)觀察到的序列號的平均值接近于N而不是1時,就會發(fā)生這種情況。

下面的直方圖顯示了兩個估計(jì)的經(jīng)驗(yàn)分布。

results.drop(0).hist(bins = every_ten)

https://gitee.com/wizardforcel/data8-textbook-zh/raw/master/img/9-18.png

你可以看到,原有方法幾乎總是低估; 形式上,我們說它是有偏差的。 但它的變異性很小,很可能接近真正的飛機(jī)總數(shù)。

新方法高估了它,和低估的頻率一樣,因此從長遠(yuǎn)來看,平均而言大致沒有偏差。 然而,它比舊的估計(jì)更可變,因此容易出現(xiàn)較大的絕對誤差。

這是一個偏差 - 變異性權(quán)衡的例子,在競爭性估計(jì)中并不罕見。 你決定使用哪種估計(jì)取決于對你最重要的誤差種類。 就敵機(jī)而言,低估總數(shù)可能會造成嚴(yán)重的后果,在這種情況下,你可能會選擇使用更加可變的方法,它一半幾率都是高估的。 另一方面,如果高估導(dǎo)致了防范不存在的飛機(jī)的不必要的高成本,那么你可能會對低估的方法感到滿意。

技術(shù)注解

事實(shí)上,“兩倍均值”不是無偏的。平均而言,它正好高估了 1。例如,如果N等于 3,來自1,2,3的抽取結(jié)果的均值是22 x 2 = 4,它比N多了 1。“兩倍均值”減 1 是N的無偏估計(jì)量。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,565評論 6 539
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,115評論 3 423
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,577評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,514評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,234評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,621評論 1 326
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,641評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,822評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,380評論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,128評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,319評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,879評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,548評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,970評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,229評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,048評論 3 397
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,285評論 2 376

推薦閱讀更多精彩內(nèi)容