본문 바로가기
AI/- Library

[Scikit-learn] pipeline 이해하기

by Yoojacha 2023. 3. 9.

인터넷에서 코드를 뒤져가며 공부를 하다보니 어떻게하면 효율적인 코드를 짤 지, 직관적이며 유지관리보수가 편한 코드가 무엇일 지 궁금증에 찾아봤습니다. 이걸 찾아본 이유는 KT AIVLE School 에서는 변수선택, 스케일링, 원핫인코딩, 전처리 등의 과정을 계속해서 반복하는 것이 학습에는 매우 좋았으나 코드를 유지보수하는 측면에서는 너무 답답했습니다.. ㅠㅠ 그래서 Pipeline에 대해서 공부를 했습니다!


PipeLine 사용해보기

from sklearn.pipeline import Pipeline
from lightgbm import LGBMClassifier as LGBMC

pipe = Pipeline([
	('Feature_Selection', SelectKBest(f_classif, k=2)), # 변수 선택
 	('Standardization', StandardScaler()),  # 표준화
 	('LGBMClassifier', LGBMC(max_depth=5, num_leaves=31) # 모델 정의
])

# 모델 학습
pipe.fit(x_train, y_train)

# 성능 평가 및 예측
pipe.predict(x_test)
pipe.score(x_test, y_test)

# Params 접근
pipe[0]
pipe[1]

# 반환할 아웃풋 피처의 이름 가져오기
pipe.named_steps['pipeline을 선언할 때 준 문자열 과정 이름'].get_feature_names_out()

# 클래스를 반환
pipe.classes_

# 특정 파이프라인 과정에 파라미터 추가
pipe.set_params(LGBMClassifier__learning_rate=0.1)

Pipeline 을 교차검증에 사용하기

from catboost import LGBMClassifier as LGBMC
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import GridSearchCV

# cross validation 사용
scores = cross_val_score(pipe, x_train, y_train, cv=3, scoring='f1_micro') # 모델 CV 학습
scores.mean()


# GrideSearchCV 사용
params = {'max_depth': range(5,20), 
          'n_estimators': range(100, 200, 10),
          'min_child_samples': [20, 22, 24]}

grid_search_model = GridSearchCV(
                                pipe,               # 파이프라인 변수
                                params_grid=params,     # 앞에서 선언한 튜닝용 파라미터 변수
                                cv=StratifiedKFold(n_splits=5), # default=5
                                refit=True,             # 기본값 True
                                scoring='f1_micro',     # 평가 방법
                                n_jobs=-1,              # cpu 전부 사용
                                verbose=2               # 학습 진행 상황 보기
                                )
                                
grid_search_model.fit(x_train, y_train)
grid_search_model.best_estimator_
grid_search_model.best_params_
grid_search_model.best_score_

 

sklearn.pipeline.Pipeline

Examples using sklearn.pipeline.Pipeline: Feature agglomeration vs. univariate selection Feature agglomeration vs. univariate selection Pipeline ANOVA SVM Pipeline ANOVA SVM Poisson regression and ...

scikit-learn.org

댓글