Scikit-learn — 기계학습 라이브러리
Summary
Python 표준 머신러닝 라이브러리. Transformer, Estimator, Pipeline 아키텍처로 데이터 전처리와 모델 훈련을 통합 관리.
Python 표준 머신러닝 라이브러리. Transformer, Estimator, Pipeline 아키텍처로 데이터 전처리와 모델 훈련을 통합 관리.
개요
Scikit-learn (sklearn)은 NumPy/SciPy 위에 구축되어 전통적 머신러닝 알고리즘을 제공한다.
- Transformer: 데이터 변환 (스케일링, 인코딩, 결측치 대체)
- Estimator: 모델 (분류, 회귀)
- Pipeline: 전처리 + 모델을 하나의 재사용 가능한 단위로 번들링
핵심 개념
Transformer (변환자)
fit() + transform() 메서드로 구성:
fit(X_train): 훈련 데이터로부터 변환 규칙 학습 (예: 평균, 표준편차)transform(X): 규칙을 데이터에 적용
주요 Transformer:
StandardScaler: 평균 0, 표준편차 1로 정규화SimpleImputer: 결측치를 평균/모드로 채우기OneHotEncoder: 카테고리를 0/1 더미 변수로 변환PCA: 주성분분석 (차원 축소)
Estimator (추정자/모델)
fit() + predict() 메서드:
fit(X_train, y_train): 훈련 데이터로 모델 학습predict(X_test): 테스트 데이터 예측
주요 Estimator:
LogisticRegression: 이진/다중 분류RandomForestClassifier: 앙상블 분류GradientBoostingClassifier: 부스팅 기반 분류
Pipeline: 데이터 누수 방지
문제: 전체 데이터 전처리 후 train-test 분할 → 테스트 데이터가 훈련에 영향
# ❌ 위험: 전체 데이터 스케일링 먼저
X_scaled = scaler.fit_transform(X) # 훈련 + 테스트 모두 포함
X_train, X_test = train_test_split(X_scaled)해결: Pipeline으로 자동 격리
# ✅ 안전: 파이프라인이 자동 처리
pipe = Pipeline([
('scaler', StandardScaler()),
('classifier', LogisticRegression())
])
pipe.fit(X_train, y_train) # 훈련만 학습, 테스트는 변환만 적용
pipe.predict(X_test)ColumnTransformer: 혼합 자료형 처리
수치형 + 범주형 데이터에 서로 다른 전처리 적용:
from sklearn.compose import ColumnTransformer
ct = ColumnTransformer([
('numeric', Pipeline([
('imputer', SimpleImputer(strategy='mean')),
('scaler', StandardScaler())
]), numeric_cols),
('categorical', Pipeline([
('imputer', SimpleImputer(strategy='most_frequent')),
('encoder', OneHotEncoder())
]), categorical_cols)
])
pipe = Pipeline([
('preprocessor', ct),
('classifier', LogisticRegression())
])GridSearchCV: 하이퍼파라미터 최적화
파이프라인의 모든 단계 파라미터를 체계적으로 탐색:
from sklearn.model_selection import GridSearchCV
param_grid = {
'preprocessor__numeric__scaler__with_mean': [True, False],
'classifier__C': [0.1, 1, 10],
'classifier__penalty': ['l1', 'l2']
}
gs = GridSearchCV(pipe, param_grid, cv=5)
gs.fit(X_train, y_train)
print(f"최고 점수: {gs.best_score_}")
print(f"최적 파라미터: {gs.best_params_}")커스텀 변환자
BaseEstimator + TransformerMixin 상속으로 기존 파이프라인에 통합:
from sklearn.base import BaseEstimator, TransformerMixin
class MyTransformer(BaseEstimator, TransformerMixin):
def fit(self, X, y=None):
self.mean_ = X.mean()
return self
def transform(self, X):
return X - self.mean_
# 파이프라인에 통합
pipe = Pipeline([
('custom', MyTransformer()),
('classifier', LogisticRegression())
])성능 최적화
캐싱: 교차검증 중 fit된 변환자 재사용
pipe = Pipeline([...], memory='/tmp/cache')병렬화: 모든 CPU 코어 활용
gs = GridSearchCV(pipe, param_grid, n_jobs=-1)관련 개념
- ml-pipeline — 파이프라인 개념, 데이터 누수 방지
- hyperparameter-tuning — 하이퍼파라미터 최적화 기법
관련 엔티티
- pandas-dataframe — 입력 데이터 소스