[ML/DL] Train/Test/Valid Dataset


モデルを学習する際に使用するデータはtrain/test/valid(またはDev)に分けて学習に用いる.なぜそうするのか、各データセットの用途とデータを分離するためのモジュールを見てみましょう.
  • 一目瞭然

    表ソース:https://untitledtblog.tistory.com/1582
  • 簡単に言えば、
    1.train dataは、モデルの学習に使用するデータセットです
    2.検証データを使用して、モデルが正常に学習されているかどうか、および継ぎ手があるかどうかを確認するデータセット
    3.テストデータは、学習終了後にモデルのパフォーマンスを評価するために最後に使用されるデータセットです.
    そう言ってもいいです.
    すなわち、検証(または開発と呼ばれる)データセットは、トレーニング中に参照できますが、テストデータセットは、学習プロセスに関係のないパフォーマンスを評価するためにのみ使用されるデータです.
    しかし、validation datasetは訓練中の重みを決定するために使用されず、validation datasetは訓練中に発生する過度な継ぎ手を防止するために、いつ学習を停止するかを判断するために使用されるだけである.
    sklearnやpytorchなどのマシンラーニングライブラリは、データを分割する機能を提供しているので、データセットを必要な割合で簡単に分割できます.
  • sklearnのshuffleSplitとtorch.utils.データのサブセットを使用してデータを分割する
  • from torch.utils.data import Subset
    Subset関数を使用してデータセットを作成すると、親セットが更新されると、サブセットも更新されます.
    # split the data into two groups
    # trian 0.8, test 0.2
    from sklearn.model_selection import ShuffleSplit
    sss = ShuffleSplit(n_splits=1, test_size=0.2, random_state=0)
    indices = range(len(fetal_ds1))
    
    for train_index, val_index in sss.split(indices):
       print(len(train_index))
       print('-'*10)
       print(len(val_index))
    # creat train_ds and val_ds
    from torch.utils.data import Subset
    
    train_ds = Subset(fetal_ds1, train_index)
    print(len(train_ds))
    val_ds = Subset(fetal_ds2, val_index)
    print(len(val_ds))
  • sklearningからデータを配布
    train test splitモジュール
  • の使用
    from sklearn.datasets import load_iris # 샘플 데이터 로딩
    from sklearn.model_selection import train_test_split
    
    # load sample
    dataset = load_iris()
    
    data = dataset['data']
    target = dataset['target']
    
    # train_test_split
    x_train, x_valid, y_train, y_valid = train_test_split(data, target, test_size=0.2, shuffle=True, stratify=target, random_state=34)
    注:https://teddylee777.github.io/scikit-learn/train-test-splithttps://deep-learning-study.tistory.com/676