[ML] Pipeline

박미영·2023년 5월 23일
0

DataSchool StudyNote - ML

목록 보기
5/19

지금까지 내용에서 불편함은?

  • 단순히 Iris, Wine 데이터를 받아서 사용했을 뿐인데,
    직접 공부하면서 코드를 하나씩 실행해보면 혼돈이 크다는 것을 알 수 있다.
  • Jupyter Notebook 상황에서 데이터의 전처리와 여러 알고리즘의 반복 실행,
    하이퍼 파라미터의 튜닝 과정을 번갈아 하다 보면 코드의 실행 순서에 혼돈이 있을 수 있다.
  • 이런 경우 클래스(class)로 만들어서 진행해도 되지만,
  • sklearn 유저에게는 꼭 그럴 필요없이 준비된 기능이 있다. → Pipeline

📌Pipeline

- wine data

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

StandardScaler로 Scaler을 하고 DecisionTreeClassifier로 Classifier를 하는 process를 만들고 싶다.

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



- Pipeline 코드 구현

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

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

pipe = Pipeline(estimators)
pipe

이제 pipe만 사용하면 위의 작업을 바로 해준다.



pipe.steps



- 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)
# stratify: 분포를 y데이터에 맞춰라 

pipe.fit(X_train, y_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))




"이 글은 제로베이스 데이터 취업 스쿨 강의를 듣고 작성한 내용으로 제로베이스 데이터 취업 스쿨 강의 자료 일부를 발췌한 내용이 포함되어 있습니다."

0개의 댓글