본문 바로가기

Data Science/Data Preprocessing

[04. Feature Sampling] 003. Train / Validation / Test Split

728x90

모델의 성능을 평가하기 위해 크게 3가지 데이터셋을 준비해야 한다.

 

1. Train set

: 모델을 학습하는 데에 사용되는 유일한 데이터

 

2. Validation set

: 학습이 완료된 모델을 검증하는 데이터이며 과적합(overfitting)을 방지하기 위해 사용된다.

 

3. Test set

: 모델의 최종 성능을 평가하는 데에 사용된다.

Validation set을 사용하지 않는 경우도 있으며, 이런 경우에는 보편적으로 Train set과 Test set의 비율을 8:2로 나눈다. 3가지 set을 모두 사용하는 경우에는 Train : Validation : Test = 6 : 2 : 2의 비율로 나누는 게 일반적이다.

 

import pandas as pd
from sklearn.model_selection import train_test_split

if __name__ == '__main__':
    data = [{'이름': '영수', '분야': '언어', '국어': 100, '영어': 90, '수학': 50, '과학': 45, '중국어': 92},
            {'이름': '철수', '분야': '언어', '국어': 98, '영어': 99, '수학': 30, '과학': 46, '중국어': 82},
            {'이름': '미혜', '분야': '수리', '국어': 20, '영어': 30, '수학': 99, '과학': 99, '중국어': 42},
            {'이름': '영이', '분야': '수리', '국어': 40, '영어': 50, '수학': 80, '과학': 85, '중국어': 62},
            {'이름': '영구', '분야': '언어', '국어': 70, '영어': 90, '수학': 40, '과학': 65, '중국어': 99},
            {'이름': '구희', '분야': '융합', '국어': 90, '영어': 96, '수학': 60, '과학': 85, '중국어': 100},
            {'이름': '지혜', '분야': '융합', '국어': 99, '영어': 92, '수학': 80, '과학': 75, '중국어': 82},
            {'이름': '미영', '분야': '융합', '국어': 98, '영어': 90, '수학': 99, '과학': 100, '중국어': 82},
            {'이름': '영미', '분야': '수리', '국어': 42, '영어': 40, '수학': 98, '과학': 88, '중국어': 17},
            {'이름': '수환', '분야': '수리', '국어': 33, '영어': 10, '수학': 99, '과학': 89, '중국어': 22}]

    data = pd.DataFrame(data)

    X = data[['국어', '영어', '수학', '과학', '중국어']]
    y = data['분야']

    X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.8, random_state=1)
    X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=0.25, random_state=1)  # 0.25 x 0.8 = 0.2

    print('Train:\n', y_train)
    print('Validation:\n', y_val)
    print('Test:\n', y_test)


결과 값
Train:
4    언어
8    수리
6    융합
1    언어
3    수리
7    융합
Name: 분야, dtype: object

Validation:
5    융합
0    언어
Name: 분야, dtype: object

Test:
2    수리
9    수리
Name: 분야, dtype: object

 

Train : Validation : Test = 6 : 2 : 2 로 잘 나누어진 것을 볼 수 있다.

728x90