使用資料集訓練 AutoML 模型時,系統會將您的資料分成三個部分:訓練部分、驗證部分和測試部分。建立資料分割時的主要目標,是確保測試集能精確呈現實際工作環境中的資料。如此可確保評估指標提供的信號準確無誤,能忠實反映這個模型在處理實際資料時的成效。
本頁面說明 Vertex AI 如何使用資料的訓練、驗證和測試集訓練 AutoML 模型,以及您可以控制資料如何在這三個集合中分割的方式。分類和迴歸的資料分割演算法,與預測的資料分割演算法不同。
分類和迴歸的分類資料
資料分割的使用方式
訓練程序會使用分割後的資料,如下所示:
模型試驗
訓練集可用來訓練採用不同預先處理、架構和超參數選項組合的模型。系統會在驗證集上評估這些模型的品質,並引導探索其他選項組合。驗證集也用於在訓練期間從定期評估中選出最佳查核點。我們會使用在平行調整階段決定的最佳參數和架構,訓練兩個集成模型,如下所述。
模型評估
Vertex AI 會使用訓練和驗證集做為訓練資料,訓練評估模型。Vertex AI 會使用測試集,針對這個模型產生最終的模型評估指標。這是測試集在程序中首次使用。這種做法可確保最終評估指標能毫無偏誤的反映出最終訓練模型在實際工作環境中的效能。
放送模型
預設資料分割
根據預設,Vertex AI 會使用隨機分割演算法,將資料分割為三個資料分割。Vertex AI 會隨機選取 80% 的資料列用於訓練集、10% 用於驗證集,以及 10% 用於測試集。對於下列資料集,我們建議使用預設分割方式:
- 隨時間變化。
- 相對平衡。
- 分散式,就像在實際工作環境中用於預測的資料。
如要使用預設資料分割,請在 Google Cloud 主控台中接受預設值,或是將 API 的「split」欄位留空。
控制資料分割的選項
您可以採用下列其中一種方法,控制系統為每個分割選取的資料列:
您只能選擇其中一種方法,並在訓練模型時做出選擇。部分選項需要變更訓練資料 (例如資料分割欄或時間欄)。加入資料分割選項的資料,並不表示您必須使用這些選項;您還是可以在訓練模型時選擇其他選項。
在下列情況下,預設分割方式並非最佳選擇:
您並未訓練預測模型,但資料具有時間敏感性。
測試資料包含實際工作環境中不會出現的客群資料。
舉例來說,假設您要利用數家商店的購買資料來訓練模型,但這個模型的主要功用是為不在訓練資料中的商店做出預測。為確保模型可推廣至未知的商店,您應依商店區隔資料集。換句話說,測試集應只包含與驗證集不同的商店,而驗證集應只包含與訓練集不同的商店。
類別數量不平衡。
如果訓練資料中有某個類別的數量比其他類別更多,您可能就要在測試資料中手動加入更多少數類別的範例。Vertex AI 不會執行分層抽樣,因此測試集可能包含的少數類別範例太少,甚至沒有任何相關內容。
隨機分割
隨機分配又稱為「數學分配」或「分數分配」。
根據預設,用於訓練集、驗證集和測試集的訓練資料百分比分別為 80%、10 和 10。如果您使用 Google Cloud 控制台,可以將百分比變更為加總為 100 的任何值。如果您使用 Vertex AI API,請使用加總為 1.0 的簡式分數。
如要變更百分比 (分數),請使用 FractionSplit 物件定義分數。
系統會以確定性演算法隨機選取要用於各資料分割的資料列。若您對系統產生的資料分割內容不滿意,則需手動分割或變更訓練資料。使用相同的訓練資料訓練新模型,會產生相同的資料分割結果。
手動分割
手動分配也稱為「預先定義的分配」。
透過資料分割欄,您可以選取要用來進行訓練、驗證和測試的特定資料列。在您建立訓練資料時,請新增包含下列其中一個值 (需區分大小寫) 的資料欄:
TRAIN
VALIDATE
TEST
UNASSIGNED
這個欄中的值必須是下列兩種組合之一:
TRAIN
、VALIDATE
和TEST
的所有使用者- 僅限
TEST
和UNASSIGNED
每個資料列都必須有此欄的值,且不得為空白字串。
舉例來說,如果指定所有集合:
"TRAIN","John","Doe","555-55-5555" "TEST","Jane","Doe","444-44-4444" "TRAIN","Roger","Rogers","123-45-6789" "VALIDATE","Sarah","Smith","333-33-3333"
僅指定測試集:
"UNASSIGNED","John","Doe","555-55-5555" "TEST","Jane","Doe","444-44-4444" "UNASSIGNED","Roger","Rogers","123-45-6789" "UNASSIGNED","Sarah","Smith","333-33-3333"
資料分割欄可以使用任何有效的欄名稱,其轉換類型可以是類別、文字或自動。
如果資料分割欄的值為 UNASSIGNED
,Vertex AI 會自動將該列指派給訓練或驗證集。
在模型訓練期間,將資料欄指定為資料分割欄。
依時間順序分割
時間排序分割法也稱為「時間戳記分割法」。
如果資料與時間相關,您可以將一個欄指定為時間欄。Vertex AI 會使用「時間」欄分割資料,最早的資料列用於訓練、接下來的資料列用於驗證,最新的資料列則用於測試。
Vertex AI 會將每個資料列視為獨立且相同分布的訓練樣本,設定「時間」欄不會改變這項設定。時間欄只用於拆分資料集。
如果您指定了時間欄,則必須針對資料集中的每個資料列加入時間欄的值。請確認「時間」欄有足夠的不同值,以便驗證和測試集不為空白。通常,至少有 20 個不同的值就足夠了。
時間欄中的資料必須符合時間戳記轉換支援的格式之一。不過,時間欄可以使用任何支援的轉換,因為轉換只會影響系統在訓練時使用該欄的方式,不會影響資料分割。
您也可以指定要指派給每個集合的訓練資料百分比。
在模型訓練期間將資料欄指定為時間欄。
預測資料分割
根據預設,Vertex AI 會使用時間分割演算法,將預測資料分成三個資料分割。建議您使用預設分割方式。不過,如果您想控制哪些訓練資料列用於哪些分割作業,請使用手動分割。
資料分割的使用方式
訓練程序會使用分割後的資料,如下所示:
模型試驗
訓練集可用來訓練採用不同預先處理、架構和超參數選項組合的模型。系統會在驗證集上評估這些模型的品質,並引導探索其他選項組合。驗證集也用於在訓練期間從定期評估中選出最佳查核點。我們會使用在平行調整階段決定的最佳參數和架構,訓練兩個集成模型,如下所述。
模型評估
Vertex AI 會使用訓練和驗證集做為訓練資料,訓練評估模型。Vertex AI 會使用測試集,針對這個模型產生最終的模型評估指標。這是測試集在程序中首次使用。這麼做可確保最終評估指標能毫無偏誤的反映出最終訓練模型在實際工作環境中的效能。
放送模型
使用訓練和驗證集訓練模型。並使用測試集進行驗證 (以便選取最佳檢查點)。從這個角度來說,測試集從未用於訓練,因為損失值是從中計算。這個模型是用於要求預測結果。
預設分割
預設 (時間順序) 資料分割方式如下:
- 訓練資料會依日期排序。
- 使用預先設定的百分比 (80/10/10),訓練資料涵蓋的時間範圍會分成三個區塊,每個訓練集各自一個。
- 空白資料列會新增至每個時序資料的開頭,讓模型從沒有足夠歷史資料 (背景資訊視窗) 的資料列中學習。新增的資料列數量,就是訓練時設定的脈絡視窗大小。
使用訓練期間設定的預測期間大小,每個未來資料 (預測期間) 完全落在其中一個資料集的資料列,都會用於該資料集。(預測期間跨越兩個集合的資料列會遭到捨棄,以免資料外洩)。
手動分割
透過資料分割欄,您可以選取要用來進行訓練、驗證和測試的特定資料列。在您建立訓練資料時,請新增包含下列其中一個值 (需區分大小寫) 的資料欄:
TRAIN
VALIDATE
TEST
每個資料列都必須有這個欄的值,且不得為空白字串。
例如:
"TRAIN","sku_id_1","2020-09-21","10" "TEST","sku_id_1","2020-09-22","23" "TRAIN","sku_id_2","2020-09-22","3" "VALIDATE","sku_id_2","2020-09-23","45"
資料分割欄可以使用任何有效的欄名稱,其轉換類型可以是類別、文字或自動。
在模型訓練期間,將資料欄指定為資料分割欄。
請務必避免時間序列之間發生資料外洩。