[AI] 변환 파이프라인

2026. 2. 8. 17:28·AI/Machine Learning
반응형

들어가며

머신러닝 알고리즘 동작 과정에서 변환 단계는 올바른 순서대로 실행되어야 한다

순서가 바뀌게되면 아예 다른 값을 보게되고 의미가 왜곡된다

그래서 우리는 파이프라인을 이용해 변환을 순서대로 처리하도록 해야한다

오늘은 사이킷런에서 제공하는 Pipeline 클래스에 대해 알아볼 것이다

 

Pipeline 클래스

from sklearn.pipeline import Pipeline

num_pipeline = Pipeline([
    ("impute", SimpleImputer(strategy="median")),
    ("standardize", StandardScaler()),
])

파이프라인 생성자는 이름,추정기를 가진 튜플들의 리스트를 받는다

추정기 이름은 이중 밑줄 문자("__")를 포함하지 않아야 한다

그 이유는 이중 밑줄 문자가 후에 하이퍼파라미터 튜닝에 사용되기 때문이다

 

파이프라인 내의 추정기는 마지막을 제외하고 모두 변환기여야 하고

마지막 추정기는 변환기,예측기 등 모두 가능하다

 

참고로 추정기는 변환기와 예측기를 모두 포함하는 개념이며

변환기는 fit(), transform() 메서드를 필요로 하고

예측기는 fit(), predict() 메서드를 필요로 한다

 

구조적으로 보면 아래와 같다

추정기(Estimator)
 ├─ 변환기(Transformer) 
 └─ 추정기(Predictor)

 

만약 추정기의 이름을 짓는 것이 귀찮다면 make_pipeline() 함수를 사용해볼 수 있다

from sklearn.pipeline import make_pipeline

num_pipeline = make_pipeline(SimpleImputer(strategy="median"), StandardScaler())

이 때 변환기 이름은 클래스 이름을 소문자로 바꾼 것이 된다

ex) "simpleimputer" 

 

파이프라인의 fit()을 호출 시 모든 변환기의 fit_transform() 메서드가 순서대로 호출되면서

한 단계의 출력을 다음단계의 입력으로 전달한다

마지막 단계에서는 fit() 메서드만 호출되고 그 다음 행동은 사용자가 직접 부른다

 

파이프라인 객체는 마지막 추정기와 동일한 메서드를 제공한다

만약 마지막 추정기가 변환기라면 transform()을

예측기라면 predict()를 사용할 수 있게된다

 

ColumnTransformer

만약 칼럼마다 다른 변환기를 사용한다면 각각 처리 하기보다는 통합해서 한 번에 처리하고 싶을 것이다

각각 처리한다면 코드도 길어져 관리가 힘들어지고 train/test 세트 나눌 때도 실수가 일어나기 쉽다

사이킷런의 ColumnTransformer를 통해 여러 파이프라인을 하나로 묶은 객체를 사용할 수 있다

from sklearn.compose import ColumnTransformer

num_attribs = ["longitude", "latitude", "housing_median_age", "total_rooms",
               "total_bedrooms", "population", "households", "median_income"]
cat_attribs = ["ocean_proximity"]

cat_pipeline = make_pipeline(
    SimpleImputer(strategy="most_frequent"),
    OneHotEncoder(handle_unknown="ignore"))

preprocessing = ColumnTransformer([
    ("num", num_pipeline, num_attribs),
    ("cat", cat_pipeline, cat_attribs),
])

ColumnTransformer 객체는 이름,변환기,변환기가 적용될 열 이름의 리스트로 구성된 튜플의 리스트를 받는다

변환기가 적용될 열 이름을 리스트로 일일이 나열하는 것은 번거롭기에

특성을 자동으로 선택해주는 make_column_selector 클래스를 사용할 수 있다

또 변환기에 이름 짓는 것이 귀찮다면 make_pipeline() 함수처럼

make_column_transformer() 함수를 사용하면 된다

단 여기서는 이름이 "pipeline-1", "pipeline-2" 이런식으로 지정된다

from sklearn.compose import make_column_selector, make_column_transformer

preprocessing = make_column_transformer(
    (num_pipeline, make_column_selector(dtype_include=np.number)),
    (cat_pipeline, make_column_selector(dtype_include=object)),
)

make_column_selector 객체를 자체를 전달하여 타입을 지정해주는 것을 볼 수 있다

 

마치며

이번 글에서는 모델을 훈련하기 직전 단계인 파이프라인 구성에 대해 알아보았다

파이프라인 구성까지 공부해보니 내용이 방대해 전체적인 흐름이 머리 속에서 뒤섞이는 느낌이여서

한 번 전체적으로 정리를 해볼 필요가 있다고 생각이 들었다

사용자가 지정한 파이프라인대로 알고리즘이 받아들이고 수행한다는 개념 자체가 신기하게 느껴졌고

그만큼 엄청 세밀하게 코드를 구성해야 오류가 안생길 것 같다고 생각했다

아직 알아야할 것이 너무 많게 느껴져 열심히 해야될 것 같다

반응형

'AI > Machine Learning' 카테고리의 다른 글

[AI] 오차 행렬(Confusion Matrix)과 정밀도(Precision), 재현율(Recall)  (1) 2026.02.28
[AI] 그리드 서치(Grid Search), 랜덤 서치(Random Search)  (1) 2026.02.08
[AI] 방사 기저 함수(RBF)를 통한 유사도 측정으로 멀티모달 분포(multimodal distribution) 변환  (1) 2026.02.08
[AI] 특성 스케일링(정규화, 표준화)  (0) 2026.02.07
[AI] 텍스트 특성 다루기  (1) 2026.02.06
'AI/Machine Learning' 카테고리의 다른 글
  • [AI] 오차 행렬(Confusion Matrix)과 정밀도(Precision), 재현율(Recall)
  • [AI] 그리드 서치(Grid Search), 랜덤 서치(Random Search)
  • [AI] 방사 기저 함수(RBF)를 통한 유사도 측정으로 멀티모달 분포(multimodal distribution) 변환
  • [AI] 특성 스케일링(정규화, 표준화)
20puddle
20puddle
20puddle 님의 블로그 입니다.
  • 20puddle
    20puddle 님의 블로그
    20puddle
  • 전체
    오늘
    어제
    • 분류 전체보기 (100)
      • Spring boot (5)
      • git & github (5)
      • algorithm (47)
        • theory (3)
        • 배열 (7)
        • 연결 리스트 (3)
        • 스택 (5)
        • 큐 (3)
        • 덱 (2)
        • 기초 코드 (19)
        • BFS (5)
      • AI (43)
        • Machine Learning (35)
        • Deep Learning (8)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    알고리즘
    딥러닝
    백준
    그레디언트 클리핑
    Spring Boot
    AI
    게시판
    홀드아웃 검증
    Aimers
    list
    인공지능
    Java
    github
    연결리스트
    주성분변환
    오프라인 학습
    머신러닝
    DL
    ML
    git
  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.3
20puddle
[AI] 변환 파이프라인
상단으로

티스토리툴바