BLOG
인공지능

사이킷런에서 모델 파이프라인 만들기


April 3, 2022, 11:58 p.m.



보통 머신러닝 모델을 만들면 전처리부터 분류나 회귀까지 다양한 데이터가 다양한 단계를 거치게 됩니다.

예를 들어 어떤 데이터를 표준화 전처리 한 후 주성분 분석(PCA)를 진행하고 이것을 서포트 벡터 머신(SVM)에 넣어 분류를 진행하는 과정을 거쳤다고 해봅시다.

사이킷런은 이 과정을 하나의 모델로 합쳐주는 파이프라인이라는 기능을 제공합니다. 파이프라인을 통해 여러가지 과정을 합쳐 한 개의 모델로 만들어 줌으로써 훨씬 간결하게 모델의 학습과 예측을 진행할 수 있습니다.

먼저 파이프라인을 적용하지 않고 와인 분류를 해보겠습니다.

import pandas as pd

df_wine = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/wine/wine.data',header=None) //데이터 가져오기

from sklearn.model_selection import train_test_split
X, y = df_wine.iloc[:, 1:].values, df_wine.iloc[:, 0].values
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, stratify=y, random_state=0) //훈련셋과 테스트셋 분리

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train_std = sc.fit_transform(X_train) // 데이터 표준화

from sklearn.decomposition import KernelPCA
pca = KernelPCA(n_components=2)
X_train_pca = pca.fit_transform(X_train_std) //주성분 분석

from sklearn.linear_model import LogisticRegression
lr = LogisticRegression(solver='liblinear', multi_class='auto')
lr.fit(X_train_pca, y_train)//로지스틱 회귀 모델로 학습

데이터를 가져와서 훈련셋과 테스트셋을 분리한 뒤 표준화 하고 PCA를 적용해서 로지스틱 회귀 모델로 학습까지 마쳤습니다.

이제 테스트 셋을 예측해 보겠습니다.

X_test_std = sc.transform(X_test) //표준화
X_pca = pca.transform(X_test_std) //PCA
lr.predict(X_pca) //예측

위와 같은 방식으로 모델을 만들면 전처리 부터 학습, 예측까지 각 데이터를 직접 순서대로 각 단계를 진행해주어야 합니다.

이번에는 사이킷런의 파이프라인을 이용해서 각 단계를 합해 하나의 모델로 만들어 보겠습니다. 여기서 중요한 점은 파이프라인에 넣으려면 사이킷런의 관례를 따르는, 즉 (fit(), fit_transform(), transform(), predict())등의 메서드가 있어야 합니다. 그렇기 때문에 아쉽지만 데이터를 훈련 셋과 테스트 셋으로 분리하는 과정은 파이프라인에 포함할 수 없겠네요.

from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import KernelPCA
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import make_pipeline

pipe = make_pipeline(StandardScaler(), KernelPCA(n_components=2), LogisticRegression(solver='liblinear', multi_class='auto'))

pipe.fit(X_train)

pipe.predict(X_test)

make_pipeline 메서드를 이용해 각 단계들을 연결해 주었습니다. 그렇기 때문에 fit메서드와 predict 메서드 한번만으로 위의 과정을 바로 할 수 있습니다.

파이프라인은 각 단계의 하이퍼파라미터들을 튜닝하는 과정에서 더욱 큰 장점을 발휘합니다. 하나의 모델로 합쳐졌기 때문에 학습하고 평가하는 과정이 간결해지기 때문이고 또한 사이킷런에 내장되어있는 그리드서치와 같은 파라미터 튜닝에도 호환되기 때문입니다.

사이킷런의 파이프라인을 이용해서 머신러닝 모델을 더욱 간결하게 만들어 보시길 바랍니다.

사이킷런 scikit-learn Pipeline make_pipeline 파이프라인



Search