데이터셋을 분리하는 이유?
- 일반화 성능 확인: 모델이 학습 데이터에만 잘 맞는지(과적합) 아니면 새로운 데이터에도 잘 동작하는지 확인하려면, 학습에 쓰지 않은 데이터(검증 또는 테스트)가 필요하다.
- 과적합 판단: 학습 성능이 좋고 검증 성능이 나쁘면 과적합 의심.
- 하이퍼파라미터 튜닝: 모델 구조나 하이퍼파라미터(예: 정규화 계수, 트리 깊이)를 조정할 때 검증 데이터 성능을 보고 결정한다.
- 데이터 누수(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 은 두 단계가 합쳐져 있다.
- fit : 훈련 데이터의 평균과 표준편차 계산
- 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 |