머신러닝 데이터셋 분리 및 스케일링 - 개념 및 연습문제

2025. 9. 30. 15:20·자격증/AICE

 

 

 

데이터셋을 분리하는 이유?

  • 일반화 성능 확인: 모델이 학습 데이터에만 잘 맞는지(과적합) 아니면 새로운 데이터에도 잘 동작하는지 확인하려면, 학습에 쓰지 않은 데이터(검증 또는 테스트)가 필요하다.
  • 과적합 판단: 학습 성능이 좋고 검증 성능이 나쁘면 과적합 의심.
  • 하이퍼파라미터 튜닝: 모델 구조나 하이퍼파라미터(예: 정규화 계수, 트리 깊이)를 조정할 때 검증 데이터 성능을 보고 결정한다.
  • 데이터 누수(data leakage) 방지: 검증(또는 테스트) 데이터는 모델이 절대 보지 않게 유지해야 실제 성능을 정확히 평가할 수 있다.
  • 보통 흐름:  train (학습) →  validation (튜닝/조정) → 최종평가는 별도의  test  데이터로.

 


 

 

 

사전 학습 - 머신러닝 기초 개념

  • Feature : 특징, 입력값 (X값)
  • Label : 레이블, 정답값 (y값)
  • 예시 (집값 예측 문제)
    • 집의 크기, 방 개수, 위치, 연식 등이 feature
    • 집의 실제 가격이 label

 

 


 

 

AICE 연습문제

 

출처 : 더에이아이랩 AICE Associate특강 연습문제

 

9. 훈련과 검증 각각에 사용할 데이터셋을 분리하려고 합니다.
is_canceled 컬럼을 y로, 나머지 컬럼을 feature값 X로 할당한 후, 훈련데이터셋과 검증데이터셋으로 분리하세요.

추가로 가이드 따라서 훈련데이터셋과 검증데이터셋에 스케일링을 수행하세요.

 - 대상 데이터프레임: df_preset
 - 훈련과 검증 데이터셋 분리
     - 훈련 데이터셋 label: y_train, 훈련 데이터셋 Feature: X_train
     - 검증 데이터셋 label: y_valid, 검증 데이터셋 Feature: X_valid
     - 훈련 데이터셋과 검증데이터셋의 비율은 80:20
     - random_state: 42
     - Scikit-learn의 train_test_split 함수를 활용하세요
 - StandardScaler 스케일링 수행
     - sklearn.preprocessing의 StandardScaler함수 사용
     - 훈련데이터셋의 Feature는 StandardScaler의 fit_transform 함수를 활용하여 X_train 변수로 할당
     - 검증데이터셋의 Feature는 StandardScaler의 transform 함수를 활용하여 X_valid 변수로 할당

 

# 여기에 답안코드를 작성하세요.
from sklearn.model_selection import train_test_split

X = df_preset.drop('is_canceled', axis=1)
y = df_preset['is_canceled']

X_train, X_valid, y_train, y_valid = train_test_split(X, y, random_state=42, test_size=0.2)

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_valid = scaler.transform(X_valid)

 

 

 

1. train 함수 import

from sklearn.model_selection import train_test_split
  • 사이킷런에서 데이터셋을 훈련/검증(또는 테스트)으로 나눌 때 쓰는 함수  train_test_split 을 가져온다.

 

2. Feature와 Target 분리

is_canceled 컬럼을 y로, 나머지 컬럼을 feature값 X로 할당하세요.

X = df_preset.drop('is_canceled', axis=1)
y = df_preset['is_canceled']
  •  df_preset 에서 정답(label) 역할을 할 컬럼은  is_canceled 이다.
  • 따라서  X 에는 그 컬럼을 제외한 모든 feature 값을 넣고,
  •  y 에는  is_canceled  값만 넣는다.

 

 

3. 훈련/검증 데이터셋 분리

X_train, X_valid, y_train, y_valid = train_test_split(X, y, random_state=42, test_size=0.2)
  •  train_size  : 훈련 데이터셋 →  X_train ,  y_train 
  •  test_size  : 검증 데이터셋 →  X_valid ,  y_valid 
  • 훈련과 검증 중 하나만 지정해도 된다. (둘 다 지정 안 하면 기본은  test_size=0.25  (즉 25%)가 적용)
  •  random_state=42 는 랜덤 분리 과정을 고정해, 실행할 때마다 동일하게 분리되도록 보장한다.
  • 결과:
    •  X_train : 훈련 데이터 feature
    •  y_train : 훈련 데이터 label
    •  X_valid : 검증 데이터 feature
    •  y_valid : 검증 데이터 label

 

 

4. 스케일링 함수 import

from sklearn.preprocessing import StandardScaler
  • 데이터를 평균 0, 표준편차 1 기준으로 표준화(스케일링)하는 클래스이다.
  • 이렇게 하면 모델 학습 시 특정 feature 값이 너무 크거나 작아서 영향을 과도하게 주는 문제를 방지할 수 있다.

 

5. 스케일링 객체 생성

scaler = StandardScaler()
  •  StandardScaler 를 사용할 준비 (아직 데이터에 적용은 안 함)

 

6. 훈련 데이터 스케일링

X_train = scaler.fit_transform(X_train)
  •  fit_transform 은 두 단계가 합쳐져 있다.
    1.  fit : 훈련 데이터의 평균과 표준편차 계산
    2.  transform : 그 기준을 이용해 훈련 데이터를 변환
  • 즉, 훈련 데이터 기준으로 스케일링 학습 → 변환을 한 번에 수행한 것이다.

 

 

7. 검증 데이터 스케일링

X_valid = scaler.transform(X_valid)
  • 여기서는  fit 을 하지 않고  transform 만 적용.
  • 즉, 훈련 데이터에서 구한 평균과 표준편차를 그대로 사용해 검증 데이터를 변환한다.
  • 이렇게 해야  데이터 누수(data leakage) 를 막을 수 있다.

 

 


 

 

 

보충 내용

 

 

fit() vs transform

  •  fit() 
    • 데이터를 보고 평균(mean), 표준편차(std) 등 스케일링 기준을 계산
    • 예: StandardScaler라면 X_train의 평균과 표준편차를 구함
  •  transform() 
    • 이미 계산된 기준으로 데이터를 변환
    • 예: X_valid는 이미 X_train 기준으로 학습했으므로 그 기준으로 변환해야 함
  •  fit_transform() 
    • fit() + transform()을 동시에 실행

 

 

왜 X_train에 fit_transform, X_valid에 transform을 쓰는가?

  • X_train: 학습 데이터 → 평균, 표준편차 계산 필요 →  fit_transform() 
  • X_valid: 검증 데이터 → X_train 기준으로 스케일링만 →  transform() 
  • ❌  X_valid 에  fit_transform()  하면?
    • 검증 데이터 기준으로 평균/표준편차 계산 → 학습 데이터와 다른 기준 → 모델 평가가 왜곡됨

 

 

y값(타깃)에는 왜 transform을 안 쓰는가?

  •  y (타깃)는 레이블(예: 0,1)
  •  StandardScaler  같은 스케일링은 연속형 수치에만 의미 있음
  • 분류 문제에서는 타깃을 그대로 사용 →  y_train ,  y_valid  그대로
  • 만약 회귀 문제에서  y 를 정규화하고 싶다면,
    • 학습 데이터만 fit → 검증 데이터 transform
    • 하지만 분류 문제에서는 필요 없음

 

 

반응형

'자격증 > AICE' 카테고리의 다른 글

머신러닝 모델 성능 평가 - 개념 및 연습문제  (0) 2025.10.10
머신러닝 의사결정나무 & 랜덤포레스트로 모델 학습 - 개념 및 연습문제  (0) 2025.10.10
머신러닝 원-핫 인코딩(One-Hot Encoding) - 개념 및 연습문제  (0) 2025.09.26
AI 모델링 기초  (0) 2025.09.01
데이터 전처리 기초  (0) 2025.08.29
'자격증/AICE' 카테고리의 다른 글
  • 머신러닝 모델 성능 평가 - 개념 및 연습문제
  • 머신러닝 의사결정나무 & 랜덤포레스트로 모델 학습 - 개념 및 연습문제
  • 머신러닝 원-핫 인코딩(One-Hot Encoding) - 개념 및 연습문제
  • AI 모델링 기초
오은이
오은이
  • 오은이
    오은이 하우스
    오은이
  • 전체
    오늘
    어제
    • 분류 전체보기 (84)
      • 일기 (2)
      • Python (1)
      • Java (4)
      • CS (2)
      • 코딩테스트 (26)
        • 백준 (25)
        • 프로그래머스 (1)
      • 웹 개발 (17)
        • Spring (6)
        • JavaScript (3)
        • WebSquare (5)
        • React (3)
      • DB (5)
        • MySQL (4)
        • Oracle (1)
      • 서버&인프라 (18)
        • Server (5)
        • Cloud (12)
        • Linux (1)
      • 자격증 (9)
        • 정보처리기사 (2)
        • AICE (7)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    SpringBoot
    오블완
    머신러닝
    docker
    톰캣
    웹스퀘어
    MySQL
    클라우드
    Spring
    AICE Associate
    Java
    백준
    알고리즘
    websquare
    cloud DB
    tomcat
    Associate
    자바
    db
    Apache
    AICE
    백준자바
    클라우드 배포
    리액트
    티스토리챌린지
    AI
    dockerspring
    docker배포
    EC2
    react
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
오은이
머신러닝 데이터셋 분리 및 스케일링 - 개념 및 연습문제
상단으로

티스토리툴바