본문 바로가기
인공지능(AI)

머신러닝에서 파이프라인(Pipeline) 은 무엇일까?

by 친절한에릭 2023. 3. 8.

머신러닝 파이프라인이란?

머신러닝 관련 글을 읽다보면 파이프라인이라는 용어가 많이 등장하는데요 해당 용어에 대해 궁금하신 분들이 많을 것이라고 생각됩니다.

 

결론적으로 말하면 머신러닝에서 파이프라인은 데이터 처리 및 분석 과정에서 발생하는 여러 단계를 자동화하는 방법입니다. 머신러닝 모델을 학습시키기 위해서는 데이터를 불러오고, 전처리하고, 모델을 학습시키고, 결과를 평가하는 등의 다양한 과정을 거쳐야 합니다. 파이프라인을 통해 이러한 단계들을 효율적으로 수행할 수 있습니다.

머신러닝 파이프라인은 크게 세 가지 단계로 구성됩니다.

  1. 데이터 전처리
  2. 모델 학습
  3. 모델 평가

파이프라인에서 각 단계는 논리적으로 구성되어 있으며, 한 단계가 끝나면 다음 단계로 넘어갑니다. 파이프라인을 사용하면 데이터 전처리, 모델 학습, 평가 과정을 자동화하여 반복적이고 시간 소모적인 과정을 간단하게 처리할 수 있습니다.

 

머신러닝 파이프라인을 이용한 MNIST 예제

 

import pandas as pd
import numpy as np
from sklearn.datasets import fetch_openml
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, confusion_matrix
import matplotlib.pyplot as plt

class MNISTPipeline:
    def __init__(self):
        self.model = None
    
    def load_data(self):
        mnist = fetch_openml('mnist_784')
        X, y = mnist['data'].values, mnist['target'].values
        return X, y
    
    def preprocess_data(self, X, y):
        # 0~1 사이로 스케일링
        X = X / 255.
        # train/test 데이터로 분리
        X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
        return X_train, X_test, y_train, y_test
    
    def train_model(self, X_train, y_train):
        # 로지스틱 회귀 모델 학습
        self.model = LogisticRegression(max_iter=1000)
        self.model.fit(X_train, y_train)
    
    def predict(self, X_test):
        # 예측
        y_pred = self.model.predict(X_test)
        return y_pred
    
    def evaluate(self, y_test, y_pred):
        # 정확도 및 오차 행렬 출력
        acc = accuracy_score(y_test, y_pred)
        cm = confusion_matrix(y_test, y_pred)
        return acc, cm
    
    def visualize_data(self, X_train, y_train):
        # 데이터 시각화
        fig, axes = plt.subplots(nrows=2, ncols=5, figsize=(10, 4))
        for i, ax in enumerate(axes.flat):
            ax.imshow(X_train[i].reshape(28, 28), cmap='gray')
            ax.set(title = f"Number: {y_train[i]}")
        plt.show()
        
pipeline = MNISTPipeline()
X, y = pipeline.load_data()
X_train, X_test, y_train, y_test = pipeline.preprocess_data(X, y)
pipeline.visualize_data(X_train, y_train)
pipeline.train_model(X_train, y_train)
y_pred = pipeline.predict(X_test)
acc, cm = pipeline.evaluate(y_test, y_pred)
print(f"Accuracy: {acc}")
print(f"Confusion matrix:\n{cm}")

 

위에서 작성한 코드는 머신러닝 파이프라인을 이용하여 MNIST 데이터를 학습하고 예측하는 예제입니다. 이 예제에서는 다음과 같은 과정을 거칩니다.

  1. 데이터를 불러오고 전처리합니다.
  2. 전처리한 데이터를 사용하여 모델을 학습시킵니다.
  3. 학습한 모델을 사용하여 테스트 데이터를 예측합니다.
  4. 예측 결과를 평가합니다.

위의 예제에서는 MNISTPipeline 클래스를 사용하여 파이프라인을 구현합니다. load_data 메소드는 fetch_openml 함수를 사용하여 데이터를 불러오고, preprocess_data 메소드에서 데이터를 전처리합니다. train_model 메소드에서는 LogisticRegression 모델을 학습시킵니다. predict 메소드에서는 학습한 모델을 사용하여 테스트 데이터를 예측합니다. evaluate 메소드에서는 예측 결과를 평가합니다. 마지막으로 visualize_data 메소드를 사용하여 학습 데이터를 시각화합니다.

위의 코드를 실행하면 파이프라인을 통해 MNIST 데이터를 학습하고 예측한 결과를 볼 수 있습니다. 이러한 방식으로 머신러닝 파이프라인을 이용하여 데이터 분석과 모델 학습을 자동화할 수 있습니다.

 

github: https://github.com/stevelee0503/ML_pipeline/blob/main/ML_Pipeline.ipynb

댓글