我們昨天下載的資料集比較完整,已經幫我們分好了訓練、驗證、測試用的資料集,但是如果今天真的遇到一大筆資料集的話該怎麼分割?想轉成 pandas 格式又該怎麼做?
昨天的下載的資料集 poem_sentiment
本身就是有分成訓練、驗證、測試,但是大部分的都只有訓練用而已,還要另外自己分出測試用的資料
一個完整的、用於模型訓練的資料集,不應該全部投入訓練,還要有驗證集跟測試集,而且不能與訓練集的資料重複,下面就來看看這些不同資料集的功能和佔整份資料集的比例
不同的資料集
訓練集(train)
- 用途:訓練模型的資料集
- 占比:8 成
- 說明:以學生學習為例,訓練集就是平常寫的練習題,是「讀書」時看到的內容,模型會用這些資料來學習怎麼產生答案
驗證集(validation / val)
- 用途:在訓練階段測試模型,並以此調整模型參數的資料集
- 占比:1 成
- 說明:就像是模擬考,用來觀察練習的情形,測驗有哪些弱點盲區,協助調整學習策略(例如模型架構或學習率)。這組資料模型「看過但不學習」
測試集(test)
- 用途:最終測驗模型好壞的資料集
- 占比:1 成
- 說明:就像最後真正的考卷,目的是測試學得好不好,能不能應用在新問題上,所以資料一定是模型沒看過的
切分資料集
合併資料集
這次下載來練習的是 openai/gsm8k
,包含 8.5K 道高品質、多樣性小學數學應用題,但因為他本身就有分成訓練集、測驗集,所以我們先來合併一下
from datasets import load_dataset, concatenate_datasets
dataset = load_dataset("openai/gsm8k", "main")
dataset = concatenate_datasets([dataset["train"], dataset["test"]]) # 結合兩個資料集
print(dataset)
# Dataset({
# features: ['question', 'answer'],
# num_rows: 8792
# })
分割資料集
data = dataset.train_test_split(train_size=0.8)
data_split = data["test"].train_test_split(test_size=0.5)
data_split["validation"] = data_split.pop("train")
data_split["train"] = data["train"]
print(data_split)
# DatasetDict({
# test: Dataset({
# features: ['question', 'answer'],
# num_rows: 880
# })
# validation: Dataset({
# features: ['question', 'answer'],
# num_rows: 879
# })
# train: Dataset({
# features: ['question', 'answer'],
# num_rows: 7033
# })
# })
- 第一行:用
.train_test_split()
將原本的資料集分成 train 跟 test,訓練集占整體 0.8 - 第二行:將只占原本 0.2 的測試集單獨切分成 train 跟 test,各占 0.5(相當於各占原本的 0.1)
- 第三行:將 train 更改為 validation
- 第四行:最後再將原本的 train 加到新的資料集
- 第一行:用
差不多就是這樣,我好像已經好一段時間沒更新了😅
最近差不多就是開始進入一個倦怠期,如果有什麼激勵的文章可以推薦給我~
我會努力更新的!下篇見~