Search

파이프라인 활용하기

1. sklearn.pipeline 의 make_pipeline

파이프라인 객체를 생성하며, 이를 통해 데이터를 변환하는 여러 단계를 자동으로 처리할 수 있다.
각 단계의 이름을 자동으로 생성한다.
StandardScaler() 의 이름은 자동으로 “standardscaler” 로 지정된다.
from sklearn.pipeline import make_pipeline
Python
복사

make_pipeline 사용방법

여러 스텝을 인자로 받아 파이프라인을 자동으로 구성해준다.
내부적으로 이름이 자동으로 할당된다.
다른 사이킷런 추정기처럼 fit() , predict() 메소드를 사용해서 학습과 예측을 수행할 수 있다.
파이프라인의 각 단계에 접근하려면 named_steps 속성을 사용한다. 각 단계의 이름은 자동으로 생성한 이름으로 접근할 수 있다.
GridSearchCV , Cross Validation 과 함께 활용할 수 있다.
예를 들어, 아래와 같이 파이프라인을 만들면
pipeline = make_pipeline(StandardScaler(), PCA(n_components=2), LogisticRegression())
Python
복사
→ StandardScaler 로 데이터를 표준화한다.
→ PCA(주성분 분석)으로 차원을 축소한다.
→ LogisticRegression 모델을 사용해서 학습 및 예측을 수행한다.
# 학습 pipeline.fit(X, y) # 예측 y_pred = pipeline.predict(X)
Python
복사
파이프라인 내부 단계 접근
pipline.named_steps['pca']
Python
복사

make_pipeline 의 각 단계 이름 확인하기

make_pipeline 은 자동으로 각 단계에 이름을 부여하는데, 이를 확인하기 위해 named_steps 속성을 사용한다.
print(pipeline.named_steps)
Python
복사
출력은 각 단계의 이름과 변환기/모델로 구성된 딕셔너리다.

make_pipline + GridSearchCV + Cross Validation

pipeline = make_pipeline(StandardScaler(), LogisticRegression()) # 파이프라인 안의 로지스틱 회귀모델의 C 파라미터 튜닝 param = {'logisticregression__C': [0.1, 1.0, 10.0]} # 교차검증 + 하이퍼파라미터 튜닝 grid_search = GridSearchCV(pipeline, param_grid, cv=5) grid_search.fit(X, y) print("Best parameters:", grid_search.best_params_)
Python
복사

make_pipeline 장점

단계마다 이름을 지정할 필요 없이 순서대로 모델과 변환기를 넣기만 하면 된다.
하나의 파이프라인에서 변환기와 모델을 한꺼번에 처리할 수 있다.

2. sklearn.pipeline 의 Pipeline

각 단계에 이름을 수동으로 지정
(이름, 변환기/모델) 형태로 작성해줘야 한다
각 단계의 이름을 명시적으로 지정해주기 때문에 일반적으로 더 많이 사용된다.
from sklearn.pipeline import Pipeline pipeline = Pipeline([ ('scaler', StandardScaler()), ('classifier', LogisticRegression()) ]) pipeline.fit(X_train, y_train) y_pred = pipeline.predict(X_test)
Python
복사

Pipeline + GridSearch + Cross Validation

하이퍼파라미터에 접근할 때 각 단계에 지정한 이름을 사용한다.
param_grid = { 'classifier__C' : [0.01, 1, 10] }
Python
복사

3. sklearn.pipeline VS imblearn.pipeline

이 두 라이브러리 모두 파이프라인을 구성하는 유사하는 기능을 제공하지만, 불균형 데이터셋을 다룰 때 차이가 있다.

sklearn.pipeline.Pipeline

사이킷런에서 제공하는 기본 파이프라인 클래스
리샘플링(오버샘플링, 언더샘플링)을 직접 지원하지 않음

imblearn.pipeline.Pipeline

imbalanced-learn 패키지에서 제공하는 파이프라인 클래스
사이킷런 기반
데이터 불균형 문제를 해결하기 위해 설계된 파이프라인
SMOTE, 언더샘플링 등
샘플링 기법을 파이프라인에 포함시킬 수 있다는 장점이 있음
분류 문제에서 클래스가 불균형할 경우, 적합하다.
교차검증(cross_val_score)에서도 사용가능하다.
imblearn.pipeline 사용방법
pipeline 단계에 리샘플링을 추가할 수 있다.
from imblearn.pipeline import Pipeline from imblearn.over_sampling import SMOTE from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LogisticRegression pipeline = Pipeline([ ('smote', SMOTE()), # 오버샘플링 ('scaler', StandardScaler()), # 데이터 스케일링 ('classifier', LogisticRegression()) # 분류 모델 ]) pipeline.fit(X_train, y_train)
Python
복사