ML_Pipeline

조천룡·2023년 7월 15일
0

Machine Learning

목록 보기
7/26
post-thumbnail

Pipeline

대부분의 기계 학습 데이터는 최종 모델을 만드는데 있어서 이상적인 형식이 아니다. 범주형 변수를 조작하거나 스케일링 및 정규화와 같은 많은 데이터 변환이 수행되어야 한다. Scikit-Learn은 전처리 기능에 일반적으로 사용되는 대부분의 기능을 내장하고 있다. 그러나 일반적인 기계 학습 워크플로우에서는 이러한 모든 변환을 두 번 이상 적용해야 한다. 모델을 교육할 때 한 번 그리고 예측하고자 하는 모든 새로운 데이터에 대해 다시 한 번하기 때문이다. 물론 재사용하는 기능을 쓸 수 있지만 먼저 실행하고 나서 모델을 따로 불러야 할 것이다. Scikit-Learn pipeline은 이 과정을 단순화하는 도구로써 다음과 같은 몇 가지 주요 이점이 있다.

  • 파이프라인을 사용하면 데이터 사전 처리 및 분류의 모든 단계를 포함하는 단일 개체를 만들 수 있다.
  • train과 test 데이터 손실을 피할 수 있다.
  • 교차 검증 및 기타 모델 선택 유형을 쉽게 만든다.
  • 재현성 증가

와인 데이터

import pandas as pd

red_url = 'https://raw.githubusercontent.com/PinkWink/ML_tutorial/master/dataset/winequality-red.csv'
white_url = 'https://raw.githubusercontent.com/PinkWink/ML_tutorial/master/dataset/winequality-white.csv'

red_wine = pd.read_csv(red_url, sep=';')
white_wine = pd.read_csv(white_url, sep=';')

red_wine['color'] = 1.
white_wine['color'] = 0.

wine = pd.concat([red_wine, white_wine])

X = wine.drop(['color'], axis=1)
y = wine['color']

레드/화이트 와인 분류기의 동작 Process

  • 여기서 test_train_split은 Pipeline 내부가 아니다.

위의 Pipleline을 코드로 구현

from sklearn.pipeline import Pipeline
from sklearn.tree import DecisionTreeClassifier
from sklearn.preprocessing import StandardScaler

estimators = [('scaler',StandardScaler()),
              ('clf',DecisionTreeClassifier())]
pipe = Pipeline(estimators)

pipe

pipeline.steps

pipe.steps

pipe.steps[0]

set_params

  • 스탭이름 "clf" + 언더바 두개 "__" + 속성이름
pipe.set_params(clf__max_depth=2)
pipe.set_params(clf__random_state=13)

Pipeline을 이용한 분류기 구성

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y,test_size=0.2, random_state=13, stratify=y)

X_train

성과

from sklearn.metrics import accuracy_score

y_pred_tr = pipe.predict(X_train)
y_pred_test = pipe.predict(X_test)

print('Train acc : ', accuracy_score(y_train, y_pred_tr))
print('Test acc : ', accuracy_score(y_test, y_pred_test))

profile
10√2 Data

0개의 댓글