[Python] 머신러닝 완벽 가이드 # 03. 훈련 데이터와 테스트 데이터

sun4_you·2023년 4월 21일
0
post-thumbnail

✏️ 03. 훈련 데이터와 테스트 데이터


훈련 데이터 세트

  • 머신러닝 알고리즘의 학습을 위해 사용

  • 데이터의 속성들과 결정값(레이블) 모두를 가지고 있다.

  • 훈련 데이터를 기반으로 머신러닝 알고리즘이 데이터 속성과 결정값의 패턴을 인지하고 학습


테스트 데이터 세트

  • 훈련 데이터 세트에서 학습된 머신러닝 알고리즘을 테스트

  • 테스트 데이터는 속성 데이터만 머신러닝알고리즘에 제공하며, 머신러닝 알고리즘은 제공된 데이터를 기반으로 결정값을 예측

  • 테스트 데이터는 학습 데이터와 별도의 데이터 세트로 제공되어야 한다.


데이터 세트가 따로 존재하는 이유

  • 만약 가지고 잇는 모든 데이터를 머신러닝 모델 훈련을 위해 사용한다면

-> 이미 알고 있는 데이터에 대한 평가 의미 X
-> 새로운 데이터에 대한 예측 잘할 수 있다는 근거 X

  • 데이터 분할 시

-> 새로운 데이터에 대해 얼마나 잘 예측 할지 가능
-> 일반화 오차 추출 가능


train_test_split

X_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 참조 해주시면 됩니다.

profile
My path to becoming contributor from user

0개의 댓글