[Data analysis] Pipeline과 ColumnTransformer 사용

최대 1 분 소요

Pipeline

  • 다양한 전처리 과정을 하나로 묶을 수 있다.

  • 묶여진 전처리 과정과 학습할 모델을 묶을 수 있다.

  • 묶여진 pipeline으로 학습시키거나, prediction을 진행할 수 있다.

 # Preprocessing for numerical data
 numerical_transformer = SimpleImputer(strategy='constant')

 # Preprocessing for categorical data
 categorical_transformer = Pipeline(steps=[
    ('imputer', SimpleImputer(strategy='most_frequent')),
    ('onehot', OneHotEncoder(handle_unknown='ignore'))
 ])
  • make_pipeline (이름 지정 없이 Pipeline 만들기)
 made_pipeline = make_pipeline(Pre-processor1, Pre-processor2)
  • FunctionTransformer로 나만의 전처리기를 만들수도 있다.

 def function(data):
     for inline_data in data:
         inline_data /= 10
     return data

 my_transformer = FunctionTransformer(function)

 data = my_transformer(data) # data pre-processing
  • 다만 메타데이터의 경우, 데이터에 따라 전처리 과정이 다를 수 있다. 그럴 경우에는 단일 pipeline으로 학습 및 추론을 진행하기에 어려움이 있을 수 있다.

ColumnTransformer

  • 위의 예시와 같이, 다양한 자료형에 대한 전처리가 필요한 경우에는 ColumnTransformer를 사용한다.

  • Pipeline과 같이 묶는데, 여러가지 자료에 따라서 적용할 전처리기를 별도로 적용할 수 있는 것이다.

    # Bundle preprocessing for numerical and categorical data
    preprocessor = ColumnTransformer(
    transformers=[
        ('num', numerical_transformer, numerical_cols),
        ('cat', categorical_transformer, categorical_cols)
    ])
    # Define model
    model = RandomForestRegressor(n_estimators=100, random_state=0)

    # Bundle preprocessing and modeling code in a pipeline
    clf = Pipeline(steps=[('preprocessor', preprocessor),
                        ('model', model)
                        ])

    # Preprocessing of training data, fit model 
    clf.fit(X_train, y_train)

    # Preprocessing of validation data, get predictions
    preds = clf.predict(X_valid)

댓글남기기