공부/파이썬(데이터)

[파이썬 sklearn] train_test_split 학습, 테스트 데이터 나누기 (빅데이터분석기사)

spine_sunbi 2023. 10. 13. 00:01
반응형

빅데이터 분석기사 제2유형을 풀기 위해서는 여러 가지 함수들을 작성해야 하는 데, 그중에 train_test_split()이라는 함수가 있습니다.

사실 단순히 점수를 얻기 위해서는 굳이 할 필요는 없지만 심신의 안정을 얻기 위해서는 이 함수를 이용해서 자체적으로 결과를 한 번 돌려보는 게 마음이 편하기 때문에 어느 정도 공부를 했다면 마무리 단계에서 이 함수를 활용해서 점검하는 걸 추천합니다.

1. 왜 데이터를 나누는가?

  • 학습 데이터를 나누지 않으면 주어진 데이터에 과적합 되어 새로운 데이터가 주어졌을 때 예측한 결과의 오차가 커집니다.

2. 사용 방법

import pandas as pd
test = pd.read_csv("data/X_test.csv")
train = pd.read_csv("data/X_train.csv")
target = pd.read_csv("data/y_train.csv")
print(train.shape)  # (3500,10) 

# 사용자 코딩
from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(train, target['gender'], test_size = 0.3, random_state = 2023)
print(X_train.shape, X_test.shape)  # (2450,10), (1050,10), (2450,), (1050,)

https://dataq.goorm.io/exam/116674/%EC%B2%B4%ED%97%98%ED%95%98%EA%B8%B0/quiz/2

 

구름EDU - 모두를 위한 맞춤형 IT교육

구름EDU는 모두를 위한 맞춤형 IT교육 플랫폼입니다. 개인/학교/기업 및 기관 별 최적화된 IT교육 솔루션을 경험해보세요. 기초부터 실무 프로그래밍 교육, 전국 초중고/대학교 온라인 강의, 기업/

edu.goorm.io

위의 데이터를 기반으로 작성했습니다. (데이터자격검정에서 제공하는 빅데이터분석기사 시험환경 체험하기 中 제2유형)

우선 사용을 위해서는

  1. sklearn.model_selection 모듈에서 train_test_split을 불러옵니다.
  2. 첫 번째 파라미터에는 피처 데이터 세트, 두 번째 파라미터에는 레이블 데이터 세트를 입력합니다.
  3. 아래의 파라미터들은 선택 값입니다. (random_state는 입력하기를 추천합니다.)
    • test_size : 테스트 데이터 세트 크기를 어느 정도의 비율로 나눌 건지 정합니다. default는 0.25입니다. (train_size 파라미터도 있긴 한데, test_size를 보통 사용해서 잘 안 쓰는 것 같습니다.) 전체 데이터의 모수에 따라 0.1~0.3 정도 왔다 갔다 하면서 쓰시는 것 같습니다.
    • random_state : 이 값을 지정하지 않으면, train_test_split()은 호출할 때마다 무작위로 데이터를 분리합니다. 따라서 호출할 때마다 동일한 데이터 세트로 나누고 싶다면 임의의 값을 작성하면 됩니다. 2023년이라 2023이라고 썼는데, 좋아하는 숫자 아무거나 입력하시면 됩니다. random 함수의 seed 역할이라고 보시면 됩니다.

train_test_split()은 X_train, X_test, y_train, y_test 이 순서대로 값을 반환합니다.

X_train (학습용 피처 데이터 세트)

X_test (테스트 피처 데이터 세트)

y_train (학습용 레이블 데이터 세트)

y_test (테스트 레이블 데이터 세트)

왜 X는 대문자고 y는 소문자냐고요? numpy as np, pandas as pd처럼 관례라고 합니다. 왜 그런지는 저도 몰?루? 그냥 보세요.

반환 결과를 보면

학습용(train) 데이터는 전체 데이터 3,500개 중에 70%인 2,450개

테스트용(test) 데이터는 전체 데이터 3,500개 중에 30%인 1,050개인 것을 볼 수 있습니다.