반응형
이번 포스팅에서는 파이프라인(Pipeline)에 대해 알아보겠습니다.
(출처: 선형대수와 통계학으로 배우는 머신러닝 with 파이썬, 장철원 지음)
파이프라인(Pipeline)
일반적으로 파이프라인은 생산라인에서 동시에 여러 공정 프로세스를
효율적으로 가능하게 하도록 하는 것을 말합니다.
머신러닝에서도 비슷하게 파이프라인은
모델을 가속, 재사용, 관리 및 배포하는 프로세스를 구현하고 표준화합니다.
파이프라인을 사용하면 데이터 전처리와 모델 학습, 예측까지 한번에 가능하여
코드도 간결해지는 장점이 있습니다.
파이프라인 적용 예제 (Python)
파이프라인 적용 전/후의 코드가 어떻게 바뀌는지
예제를 통해 알아보겠습니다.
import pandas as pd
import numpy as np
from sklearn import datasets
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
data_url = "http://lib.stat.cmu.edu/datasets/boston"
raw_df = pd.read_csv(data_url, sep="\s+", skiprows=22, header=None)
data = np.hstack([raw_df.values[::2, :], raw_df.values[1::2, :2]])
target = raw_df.values[1::2, 2]
# 데이터
X = data
y = target
# 데이터셋을 트레이닝 데이터, 테스트 데이터로 분할
X_tn, X_te, y_tn, y_te = train_test_split(X, y, random_state=7)
# 표준화 스케일링
std_scale = StandardScaler()
X_tn_std = std_scale.fit_transform(X_tn)
X_te_std = std_scale.transform(X_te)
# 학습
clf_linear = LinearRegression()
clf_linear.fit(X_tn_std, y_tn)
# 예측
pred_linear = clf_linear.predict(X_te_std)
# 평가
mean_squared_error(y_te, pred_linear)
print(mean_squared_error(y_te, pred_linear))
참고 교재에 있는 코드를 사용하였습니다.
보스톤의 집값에 관한 데이터를 학습한 모델로써,
예측의 mean squared error는 약 29.5%로 나오네요.
이 코드를 파이프라인을 사용하여 나타내면 어떨까요?
import pandas as pd
import numpy as np
from sklearn import datasets
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
data_url = "http://lib.stat.cmu.edu/datasets/boston"
raw_df = pd.read_csv(data_url, sep="\s+", skiprows=22, header=None)
data = np.hstack([raw_df.values[::2, :], raw_df.values[1::2, :2]])
target = raw_df.values[1::2, 2]
# 데이터
X = data
y = target
# 데이터셋을 트레이닝 데이터, 테스트 데이터로 분할
X_tn, X_te, y_tn, y_te = train_test_split(X, y, random_state=7)
# 파이프라인
linear_pipeline =Pipeline([('scaler',StandardScaler()),('linear_regression',LinearRegression())])
# 학습
linear_pipeline.fit(X_tn, y_tn)
# 예측
pred_linear = linear_pipeline.predict(X_te)
# 평가
mean_squared_error(y_te, pred_linear)
print(mean_squared_error(y_te, pred_linear))
data set을 training data, test data로 분할하기까지의 코드는 같지만
그 이후 데이터 전처리, 모델을 학습하고 예측하는 과정은 파이프라인으로 해결합니다.
코드가 뭔가 통일감도 생긴 것 같고, 간결해져서 좋네요.
결과는 물론 동일한 결과를 얻을 수 있습니다.
데이터 사이언스 전공자 관점이 아닌 일반인 관점이라
아직은 뭐가 편한지 잘 모르겠지만...
코드가 간결해지니 익혀둬서 나쁠게 없는건 확실한 것 같습니다.
이상 파이프라인에 대한 포스팅을 마칩니다.
반응형
'잡학사전 > 머신러닝' 카테고리의 다른 글
[머신러닝] 손실함수(loss function) (1) - L1, L2 손실함수 (0) | 2022.04.13 |
---|---|
[머신러닝] 그리드 서치(grid search) (0) | 2022.04.12 |
[머신러닝] 교차 검증(cross validation) (0) | 2022.04.05 |
[머신러닝] 오버피팅과 언더피팅 (0) | 2022.04.04 |
[머신러닝] 초평면(hyperplane)과 반공간(halfspace) (0) | 2022.03.20 |