
머신러닝 알고리즘의 학습을 위해 사용
데이터의 속성들과 결정값(레이블) 모두를 가지고 있다.
훈련 데이터를 기반으로 머신러닝 알고리즘이 데이터 속성과 결정값의 패턴을 인지하고 학습
훈련 데이터 세트에서 학습된 머신러닝 알고리즘을 테스트
테스트 데이터는 속성 데이터만 머신러닝알고리즘에 제공하며, 머신러닝 알고리즘은 제공된 데이터를 기반으로 결정값을 예측
테스트 데이터는 학습 데이터와 별도의 데이터 세트로 제공되어야 한다.
- 만약 가지고 잇는 모든 데이터를 머신러닝 모델 훈련을 위해 사용한다면
-> 이미 알고 있는 데이터에 대한 평가 의미 X
-> 새로운 데이터에 대한 예측 잘할 수 있다는 근거 X
- 데이터 분할 시
-> 새로운 데이터에 대해 얼마나 잘 예측 할지 가능
-> 일반화 오차 추출 가능
train_test_splitX_train, X_test, y_train, y_test = train_test_split(data, target, test_size, random_state, stratifiy)
data: feature 데이터
target: label 데이터
test_size: 전체 데이터에서 테스트 데이터 세트의 비율 (기본값은 0.25로서 25%를 테스트 세트로 사용)
random_state: train_test_split은 모든 데이터를 랜덤하게 섞고(shuffle) 분할(split)하기 때문에, 수행 시 마다 다른 데이터 세트가 생성될 수 있으므로 random_state를 이용해 난수 값을 고정
stratify: 데이터 분할 시 원본 데이터의 비율과 동일하게 테스트 세트를 생성하기 위해 지정하는 데이터 기준
target = [0,0,0,0,0,1,1,1,1,1,2,2,2,2,2]
만약 위 데이터를 단순하게 앞에서 부터 10개, 5개로 끊어서 훈련 / 테스트 데이터 세트로 만든다면 다음과 같다.
훈련 데이터 세트 : [0,0,0,0,0,1,1,1,1,1]
테스트 데이터 세트 : [2,2,2,2,2]
훈련 데이터 세트에는 0과 1번 레이블만 학습하게 되고, 테스트 시에는 2번만 테스트하기 때문에 머신러닝 모델이 0, 1, 2 클래스를 골고루 학습할 수 없다.
train_test_split은 랜덤성을 이용해 train/test 데이터 세트를 적절히 섞어서 잘라준다
train_test_split 을 이용하여 위 데이터를 랜덤하게 분할할 때 한쪽 데이터가 많아지거나 적어질 수도 있게 된다.
원본 데이터 비율에 맞게 훈련 세트와 테스트 세트를 분할하는 것을 계층적 분할이라고 한다.
훈련 데이터 세트 : [0,0,0,1,1,1,2,2,2]
테스트 데이터 세트 : [0,0,1,1,2,2]
책
해당 챕터의 실습 및 예제 코드는 아래 링크의 Machine Learning 참조 해주시면 됩니다.