본문 바로가기
개발/Python

Scikit-Learn > fit(), transform()

by shining park 2025. 5. 10.

Scikit-Learn (sklearn) 이란?

  • scikit-learn 사이킷런은 Python에서 가장 널리 사용되는 머신러닝 라이브러리 중 하나
  • 간단하고 일관된 API를 통해 다양한 머신러닝 알고리즘을 사용할 수 있도록 도와줌

 

✅ 설치 방법

  • pip install scikit-learn

 

✅ fit() / transform() / fit_transform() / inverse_transform()

  • Python의 사이킷런에서 머신러닝 전처리 시 자주 쓰이는 메서드
  • fit(): 데이터의 통계 정보(ex. 평균, 표준편차 등)를 계산해서 저장만 함 (변환 X) =>  return None
  • transform(): 계산된 정보로 데이터 변환 => return ndarray (변환된 데이터)
  • fit_transform(): fit() + transform() 저장하고 동시에 데이터를 변환 => return ndarray (변환된 데이터)
  • inverse_transform(): 변환된 데이터를 원래 스케일로 되돌림 => return ndarray (되돌린 데이터)
 
 예시
from sklearn.preprocessing import StandardScaler

# 학습/테스트 데이터 분할
(X_train, X_test, y_train, y_test) = train_test_split(fish_data, fish_target, test_size=0.2, random_state=42, stratify=fish_target)

# 학습/테스트 데이터 전처리(스케일링)
# 스케일러 객체 생성
scaler = StandardScaler()
# 다른 방식으로 바꾸고 싶으면 MinMaxScaler, RobustScaler 등의 다른 스케일러 사용
# StandardScaler는 오직 평균/표준편차 기반

# X_train의 속성별 평균/표준편차 구하는 fit
# 이를 토대로 실제 데이터를 변환하는 transform 작업을 한번에 진행
# ‼️fit + transform을 한 번에
X_train_scaled = scaler.fit_transform(X_train)

# 학습 환경과 테스트 환경은 동일하게 맞춰줘야 함
# 이미 scaler에 학습된(fit) 평균/표준편차를 토대로 테스트 데이터도 변경(transform)
# ‼️계산한 통계치로 변환
X_test_scaled = scaler.transform(X_test)

# 실제 길이, 무게가 아닌 표준점수로 표현됨
print(X_train_scaled)
# [[-1.58299969 -1.3623164 ]
#  [-0.18349562 -0.64945483]
#  [-1.53337188 -1.35864973]
# ...
print(X_test_scaled)
# [[-0.09416558 -0.50278807]
#  [-1.53337188 -1.35834417]
#  [ 0.6701026   0.70415714]
# ...


# 모델 생성/학습
kn_clf_new_new = KNeighborsClassifier()
# ‼️평균과 표준편차만 계산 (변환은 하지 않음)
kn_clf_new_new.fit(X_train_scaled, y_train)

kn_clf_new_new.score(X_test_scaled, y_test) # => 1.0 (100점)

 

📌 정리

  • 훈련 데이터에는 fit_transfrom()
  • 테스트 데이터에는 transform() ➡︎ 훈련 데이터로 fit 한 후, 테스트 데이터는 같은 기준으로 변환만 해야함
  • 예측이나 분석 후 원래 값으로 복원하고 싶을 때는 inverse_transform() ➡︎ 모델 학습 전에 데이터를 정규화 또는 표준화하면 숫자의 범위가 바뀌기 때문에, 결과를 해석하거나 시각화할 때는 원래의 값으로 복원해야 할 수 있음