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
복사