確保機器學習模型在未知環境中泛化的一種嘗試是分割資料。這可以透過多種方式實現,從3-way(訓練、測試、評估)拆分到交叉驗證的k拆分。其基本原理是,透過在資料子集上訓練機器學習模型,並在未知資料上進行評估,可以更好地推理模型在訓練中是否存在欠擬合或過度擬合。
對於大多數工作來說,簡單的3-way就足夠了。在現實生產中,拆分方式往往需要更複雜的方法來確保泛化問題。這些拆分更加複雜,因為它們源自於實際數據,而不是普通拆分方法所基於的資料結構。這篇文章試圖講解一些在機器學習開發中拆分資料的非常規方法,以及它們背後的原因。
為了簡單起見,讓我們使用以表格格式來表示簡單多變量時間序列資料集。此資料由3個數字特徵、1個分類特徵及1個時間戳特徵組成。以下是可視化的:
這種類型的資料集在機器學習的許多用例和行業中都很常見。一個具體的例子是從工廠車間裡面多個感測器傳輸的時間流資料。分類變數將是機器的ID,數字特徵將是感測器正在記錄的資訊(例如,壓力、溫度等),時間戳將是資料傳輸和記錄在資料庫中的時間。
假設您從資料工程部門以csv檔案的形式收到了這個資料集,並承擔編寫分類或迴歸模型的任務。在這種情況下,標籤可以是任何特徵或額外的列。要做的第一件事是將資料拆分成有意義的子集。
為方便起見,您可以簡單拆分成訓練集和測試集。馬上問題來了,資料的簡單拆分在這裡是行不通的:資料是由多個按時間索引的感測器資料流組成的。那麼,如何對資料進行拆分,從而保持順序,並使後續機器學習模型具有很好的泛化性呢?
#我們可以做的最直接的轉換是表示每個分類類別的資料(在我們的運行範例中,視覺化每台機器的資料)。這將產生以下結果:
水平拆分
分組使拆分的問題變得簡單了一些,並且很大程度上取決於你的假設。您可能會問:針對一個群組訓練的機器學習模型如何泛化到其他群組,也就是說,如果在class_1、class_2和class_3時間流上進行訓練,該模型在class_4和class_5時間流上的會如何呢?以下是這種拆分的視覺化圖:
上面的這種拆分方式,我稱之為水平拆分。在大多數機器學習庫中,透過簡單地按分類特徵進行分組並沿著分類進行分區,可以輕鬆實現這種拆分。使用這種拆分進行訓練,該模型就已經收集到了在未知分組中泛化的資訊。
值得注意的是,拆分並沒有把時間當作拆分本身的基礎。不過,可以假設您還將按每個時間流的時間排序來拆分,以在資料中維護這種關係。這就引出了下一個拆分方式。
但如果你想跨越時間本身呢?對於大多數時間序列建模,拆分資料的常用方法是past和future。也就是說,將訓練集的歷史資料與評估集的資料進行比較。在這種情況下的假設是:機器學習模型如何訓練每組的歷史資料泛化到每組的未來資料?這個問題可以透過所謂的垂直分割來回答:
這種拆分的成功訓練將表明該模型能夠在它已經看到的時間流中提取模式,並對未來的行為做出準確的預測。然而,這本身並不能表明該模型可以很好地泛化到來自不同組的其他時間流。
當然,您的多個時間流現在必須單獨排序,所以我們仍然需要分組。但這次,我們不是跨組,而是從past每個組中抽取樣本並將其放入train中,並將future組相應的放入eval 中。在這個理想化的例子中,所有時間流具有相同的長度,即每個時間流具有完全相同數量的資料點。但是,在現實世界中,情況可能並非如此——因此您需要一個系統來為每個群組建立索引以進行拆分。
大家可能想知道,他們是否可以產生一個模型,在水平和垂直拆分的約束下都可以很好的進行泛化呢?在這種情況下,假設將是:如何在一些組的歷史數據上訓練的機器學習模型泛化到這些組的未來數據和其他組的所有數據?這種混合拆分的可視化結果如下所示:
當然,如果模型訓練是成功的,這個模型肯定會比其他模型在現實世界中更強壯。它不僅可以證明它已經看到的一些組的學習模式,而且還可以證明它已經獲得了跨組泛化的信息。如果我們將來要為工廠增加更多類似的機器,這可能是有用的。
水平和垂直拆分的概念可以推廣到許多維度。例如,可能需要根據兩個分類特徵而不是一個分類特徵進行分組,以便進一步隔離資料中的子組,並按子組對它們進行排序。中間可能還存在用於篩選樣本數量較少的群組的複雜邏輯,以及與該領域相關的其他業務級邏輯。
這個假設的例子用來說明可以建立的各種機器學習分割的無限可能性。就像在評估模型時確保機器學習的公平性很重要一樣,花足夠的時間考慮劃分資料集及其對下游模型產生偏差的後果也同樣重要。
以上是時間序列機器學習資料集的非常規拆分技術的詳細內容。更多資訊請關注PHP中文網其他相關文章!