iT邦幫忙

DAY 11
0

拆分數據集允許通過從訓練中提取這些數據子集來針對模擬的真實世界數據集測試建模。
但是,我們如何知道實際劃分原始數據集的位置?如果數據集本身很大怎麼辦?
我們是否需要對每個數據點進行訓練和測試?

在本課程中,我將引導您了解如何以可重複的方式實際分割數據集,使用Google Big Query以及您應避免的幾個關鍵陷阱。然後你將在下一個實驗室自己練習。
現在,在我們討論拆分我們的數據集之前,我們首先需要得到一個進行拆分。
在本例中,我們將使用美國運輸和統計局的Airline Ontime性能數據。 Google已將此公開數據提供給Big Query中的所有用戶,如airlineontimedata.flightsdataset。
現在,該數據集已跟踪大約7000萬次航班的航班到達和離開延誤。讓我們討論如何以統一和可重複的方式有效地對來自該數據集的數據進行訓練,驗證和測試。
SQL,這是結構化查詢語言,然後是Big Query,因為它是你執行SQL的函數,具有Rand函數,並且它將生成一個介於0和1之間的值。只需應用一個簡單的SQL,where子句,就可以非常輕鬆地獲得80%的數據集。
您可能會注意到一些明顯的問題。如果同事希望使用您使用的相同的80%訓練數據集重複您的實驗,請考慮此過程是否可重複。假設這個數據集設置了7000萬個航班,他們會在同一個訓練數據集中獲得相同的5600萬次飛行或80%的飛行嗎?好吧,我們需要一種更好的方法來了解哪些數據屬於哪個桶 - 培訓,驗證和測試 - 這將使我們和我們的同事能夠使用每個桶的完全相同的數據重複我們的實驗。
現在,正如您可能已經猜到的那樣,每次運行查詢時,一個簡單的隨機函數只會獲取此處顯示的五個隨機選定行的新集合。這使得為那些驗證和測試存儲桶識別和拆分剩餘的20%的數據變得非常困難,幾乎不可能。此外,數據集也可能會被排序,這可能會增加樣本的偏差。簡單地添加訂單時,在進行小批量梯度下降等操作時也會遇到自己的問題。
現在,對於機器學習,您希望能夠從根本上創建這些可重複的數據樣本。實現此目的的一種方法是在您使用的字段上使用散列函數的最後幾位來分割或緩衝數據。 BigQuery中公開提供的一種這樣的哈希函數稱為Farm Fingerprint,只是一個哈希函數。 Farm Fingerprint將採用類似2018年12月10日的值,將其轉換為長數字串,並且此哈希值將與數據集中的每個其他12月10日2018值相同。現在,假設您正在構建機器學習算法來預測到達延遲。您可能希望按日期分割數據,並在一個數據集(訓練數據集)中獲得大約80%的天數。現在這實際上是可重複的,因為Farm指紋哈希函數在特定日期的任何時候都會返回完全相同的值。您可以確定每次都能獲得完全相同的80%或大約80%的數據。
如果您按到達機場分割數據,設置80%的機場都在訓練數據集中,其他機場都在測試和驗證中,那麼您將在抵達機場使用哈希函數。那麼,在這裡查看查詢,您將如何獲得新的10%樣本進行評估?那麼,對於測試數據,您可以將小於8改為等於8,或者對於評估或測試,將等於8或等於9再改為10%。這就是你分割這些桶的方式。所以,我們想要預測基於航空公司,時間,天氣和機場特徵的航班延誤,例如機場的跑道數量。我們應該在哪些字段中拆分數據集?日期?飛機場?運營商名稱?因此,請務必根據您可以承受損失的列將數據拆分為這些有效集。例如,如果您希望分割日期以預測到達延遲並且您的數據集只有兩天的航班,那麼您將無法將其拆分為50-50以上。記住哈希函數是一種方式,所以它只會給你一個值。如果您只有兩個日期,則無法獲得80-20。


上一篇
[Day 10] validation set
下一篇
[Day 12] Benefits of a Directed Graph
系列文
Machine Learning Study 30天學習筆記19

尚未有邦友留言

立即登入留言