데이터 분할: 훈련 vs 테스트
머신러닝에서는 모델이 보지 못한 데이터에 얼마나 잘 일반화하는지 평가하기 위해 데이터셋을 훈련
세트와 테스트
세트로 나눕니다.
-
훈련 세트
: 모델이 패턴을 학습하는 데 사용 -
테스트 세트
: 모델이 한 번도 보지 못한 데이터에서의 성능을 확인
이 둘을 분리하지 않으면 모델이 데이터에 과적합되여, 일반적인 규칙을 학습하지 못하고 훈련 데이터에만 잘 맞는 모델이 될 수 있습니다.
사이킷런의 train_test_split
사용하기
train_test_split()
은 데이터를 무작위로 훈련/테스트 세트로 나눕니다.
기본 훈련-테스트 분할
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
# 데이터셋 로드
iris = load_iris()
X, y = iris.data, iris.target
# 훈련(80%) / 테스트(20%)로 분할
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
print("훈련 크기:", X_train.shape)
print("테스트 크기:", X_test.shape)
무작위성 제어
재현성은 동일한 데이터셋에 대해 동일한 분할 결과를 보장하는 것을 의미합니다.
random_state
파라미터를 지정하면 재현성이 보장됩니다.
이 파라미터를 지정하지 않으면 실행할 때마다 분할 결과가 달라질 수 있습니다.
고정된 random_state
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, random_state=123
)
print("훈련 크기:", X_train.shape)
print("테스트 크기:", X_test.shape)