官术网_书友最值得收藏!

2.6 Bootstrapping算法

有時我們想要知道某個數據集的一些統計數據,但是這個數據集太大了,對它進行操作并不可行。打個比方,假設我們想知道現在世界上所有活著的人的平均身高。對于這個問題,沒有一種切實可行的方法去測量每個人的身高,所以我們需要另一種方法。

通常我們會選取數據集的一部分來解答這類問題,然后對這一部分進行測量。我們可以求出幾千人的身高,然后通過計算這些測量值的均值來近似求出所有人的平均身高。

我們把世界上的所有人稱為總體(population)。因為人數太多,所以我們會從中歸納出一個規模合理的群體。我們希望這個群體能代表總體,故將這個較小的群體稱為樣本集(sample set)。樣本集是在無放回的情況下構建的,因此每從總體中選擇一個值并將其放入樣本集,這個值在總體中就會被刪除,不能再次被選擇。

通過仔細認真地構建樣本集,我們希望就所要度量的屬性而言,這個樣本集可以成為總體的合理代表。圖2.15用21個元素表達了總體的概念,樣本集則包含了來自總體的12個元素。

(a)                          (b)

圖2.15 從總體中創建了一個樣本集。(a)總體,在本例中,總體包含21個元素;(b)樣本集,在本例中,樣本集只包含12個元素

現在我們測量樣本集的均值,以此作為總體均值的估計值。在這個小例子中,我們可以計算出總體的均值,大概是4.3,而樣本集的均值約為3.8,這一匹配并不是很完美,但也不算是大錯特錯。

大多數情況下,我們無法測量總體的值(這是一開始我們構建樣本集的原因),所以只能通過找到樣本集的均值得到答案。但是,這個樣本集表現得有多好呢?它是我們可以依賴的對總體的一個好的估量嗎?很難說。

如果可以用置信區間(confidence interval)來表示結果,就更好了。雖然目前我們還沒有深入討論這個概念,但是可以對置信區間做一個表述:“我們有98%的概率確定總體的均值在3.1和4.5之間?!?/p>

要做出一個這樣的表述,我們就需要知道區間的上界和下界(在這里是3.1和4.5),并衡量我們對該值存在于該區間范圍內信心的大?。ㄟ@里是98%)。通常,我們會為當前的任務設定一個所需的信心,然后再找到該信心所對應的范圍的上下值。

Bootstrapping算法可以幫助我們找到讓我們表達信心的值[Efron93] [Ong14]。我們可以像之前說的身高的例子那樣利用它來討論均值。同時,我們也可以用Bootstrapping來表示對于標準差的信心,又或者用我們感興趣的其他統計學度量。

這個過程包括兩個基本步驟:第一步是我們在圖2.15中看到的那樣,根據原始的總體創建一個樣本集;第二步則涉及對樣本集進行重采樣(resampling)以生成一些新數據集,而這些新數據集中的每一個都稱為bootstrap。

為了創建bootstrap,我們先要確定需要從初始樣本集中選擇多少元素。盡管我們通常使用較少的元素,但是理論上可以選擇小于樣本集數據量的任意數量的元素。然后我們會從樣本集中有放回地隨機抽取多個元素(在這里,我們可能會多次選擇相同的元素)。這個過程如圖2.16所示。

圖2.16 創建bootstrap。樣本集有12個元素,而每個bootstrap有5個元素,即每個bootstrap從樣本集中有放回地隨機選擇了5個元素

抽取必須要是有放回的,因為我們可能想要構建與樣本集大小相同的bootstrap。在本例中,我們可能會設定每個bootstrap中包含12個值,如果不進行有放回的抽取,那么每個bootstrap都將與樣本集相同。

有了這些bootstrap,我們就可以測量它們每一個的均值。如果我們在直方圖上畫出這些平均值(圖2.17),就會發現,如之前討論過的那樣,它們傾向于形成一個高斯分布。這個結果是自然形成的,與選擇的具體值無關。就這個圖來說,總體是0~1000的1000個整數,之后我們從這個數據集中隨機抽取500個值來創建一個樣本集,然后又創建了1000個bootstrap,每個bootstrap包含20個元素。

圖2.17 直方圖展示了具有給定平均值的bootstrap的數量,在490左右的藍色豎線是樣本集的均值,在500左右的紅色豎線是總體的均值

既然已經知道了總體,就可以計算它的均值,大約是500。樣本集的均值也非常接近總體的均值,大約是490。bootstrap則幫助我們確定:我們應該在多大程度上信任490這個值。

無須進行數學計算,bootstrap均值近似于高斯曲線,它會告訴我們需要知道的一切。假設我們想找到有著80%的置信區間,它將包含總體的均值,就只需要去掉bootstrap值中最低的和最高的10% [Brownlee17]。圖2.18顯示了一個方框,畫出了我們認為置信區間有80%的值,其中包含已知的真實值500??梢钥吹?,我們有80%的信心去確定總體的均值在410和560之間。

回顧一下,我們想知道一些描述總體性質(可能是其均值或方差),假設由于某種原因,我們不能對總體進行操作,因此不能直接測量這種性質。為了得到這些值,我們通過抽取總體中的一些值形成了一個樣本集,然后再從中選出一些bootstrap(每個bootstrap通過對樣本集元素進行有放回的采樣得到)。通過觀察bootstrap的統計數據,我們就可以得到一個置信區間,從而知道我們有多大的信心去確定總體的均值是否在某個區間中。

bootstrap是很吸引人的,因為我們可以使用小型的bootstrap(每個bootstrap可能只包含10個或20個元素),這種小容量意味著對每個bootstrap程序的構建和處理都可以非??斓剡M行。為了彌補這種小容量的缺點,我們經常會構建數千個bootstrap。所構建的bootstrap越多,結果就越接近高斯曲線,也就越能精確地確定置信區間。

在后續章節中,我們將再次使用bootstrap的思想來從更簡單的工具集合中構建強大的機器學習工具。

圖2.18 我們有80%的信心去確定這個方框里包含總體的均值

主站蜘蛛池模板: 大关县| 阿尔山市| 五原县| 海安县| 岑溪市| 鄂托克旗| 庆元县| 石棉县| 司法| 奉化市| 青浦区| 永康市| 石狮市| 招远市| 广丰县| 海丰县| 冷水江市| 南岸区| 漯河市| 泸州市| 九江市| 海盐县| 武山县| 裕民县| 鹰潭市| 咸阳市| 寻乌县| 德保县| 正镶白旗| 阆中市| 隆尧县| 洛阳市| 军事| 大方县| 永定县| 湘潭县| 深泽县| 东安县| 托里县| 双辽市| 麻城市|