[Data analysis] Pipeline과 ColumnTransformer 사용
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)
댓글남기기