혼합 데이터 타입을 위한 열 변환기

Beginner

This tutorial is from open-source community. Access the source code

소개

이 실습에서는 ColumnTransformer를 사용하여 다양한 전처리 및 특징 추출 파이프라인을 특징의 서브셋에 적용하는 방법을 보여줍니다. 이는 특히 이종 데이터 유형을 포함하는 데이터셋의 경우 유용합니다. 숫자 특징은 스케일링하고, 범주형 특징은 원 - 핫 인코딩할 수 있기 때문입니다.

이 실습에서는 OpenML 의 타이타닉 데이터셋을 사용하여 ColumnTransformer를 사용하여 범주형 및 숫자 데이터를 모두 전처리하는 파이프라인을 구축하고, 이를 사용하여 로지스틱 회귀 모델을 학습합니다.

VM 팁

VM 시작이 완료되면 왼쪽 상단 모서리를 클릭하여 Notebook 탭으로 전환하여 연습용 Jupyter Notebook에 접근합니다.

때때로 Jupyter Notebook 이 완전히 로드되기까지 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한으로 인해 작업 검증은 자동화될 수 없습니다.

학습 중 문제가 발생하면 Labby 에 문의하십시오. 세션 후 피드백을 제공하면 문제를 신속하게 해결해 드리겠습니다.

라이브러리 가져오기

이 단계에서는 파이프라인을 구축하는 데 필요한 라이브러리를 가져옵니다.

import numpy as np
from sklearn.compose import ColumnTransformer
from sklearn.datasets import fetch_openml
from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split, RandomizedSearchCV
from sklearn.feature_selection import SelectPercentile, chi2

데이터셋 로드

이 단계에서는 fetch_openml를 사용하여 OpenML 의 타이타닉 데이터셋을 로드합니다.

X, y = fetch_openml(
    "titanic", version=1, as_frame=True, return_X_y=True, parser="pandas"
)

숫자형 및 범주형 특징 정의

이 단계에서는 파이프라인에 사용할 숫자형 및 범주형 특징을 정의합니다. 또한 숫자형 및 범주형 데이터에 대한 전처리 파이프라인을 정의합니다.

numeric_features = ["age", "fare"]
numeric_transformer = Pipeline(
    steps=[("imputer", SimpleImputer(strategy="median")), ("scaler", StandardScaler())]
)

categorical_features = ["embarked", "sex", "pclass"]
categorical_transformer = Pipeline(
    steps=[
        ("encoder", OneHotEncoder(handle_unknown="ignore")),
        ("selector", SelectPercentile(chi2, percentile=50)),
    ]
)

전처리기 정의

이 단계에서는 데이터를 전처리하는 데 사용될 ColumnTransformer를 정의합니다.

preprocessor = ColumnTransformer(
    transformers=[
        ("num", numeric_transformer, numeric_features),
        ("cat", categorical_transformer, categorical_features),
    ]
)

전처리 파이프라인에 분류기를 추가

이 단계에서는 Pipeline을 사용하여 로지스틱 회귀 분류기를 전처리 파이프라인에 추가합니다.

clf = Pipeline(
    steps=[("preprocessor", preprocessor), ("classifier", LogisticRegression())]
)

데이터 분할

이 단계에서는 train_test_split 함수를 사용하여 데이터를 학습용 및 테스트용 집합으로 분할합니다.

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

파이프라인 학습

이 단계에서는 학습 데이터에 파이프라인을 적용합니다.

clf.fit(X_train, y_train)

파이프라인 평가

이 단계에서는 모델 점수를 계산하여 파이프라인의 성능을 평가합니다.

print("model score: %.3f" % clf.score(X_test, y_test))

데이터 타입별 컬럼 선택을 통한 ColumnTransformer 사용

이 단계에서는 데이터 타입별로 컬럼을 선택하여 ColumnTransformer를 사용합니다. make_column_selector를 사용하여 데이터 타입에 따라 컬럼을 선택합니다.

from sklearn.compose import make_column_selector as selector

subset_feature = ["embarked", "sex", "pclass", "age", "fare"]
X_train, X_test = X_train[subset_feature], X_test[subset_feature]

preprocessor = ColumnTransformer(
    transformers=[
        ("num", numeric_transformer, selector(dtype_exclude="category")),
        ("cat", categorical_transformer, selector(dtype_include="category")),
    ]
)
clf = Pipeline(
    steps=[("preprocessor", preprocessor), ("classifier", LogisticRegression())]
)

하이퍼파라미터 튜닝을 위한 그리드 서치 사용

이 단계에서는 그리드 서치를 사용하여 파이프라인의 하이퍼파라미터를 튜닝합니다.

param_grid = {
    "preprocessor__num__imputer__strategy": ["mean", "median"],
    "preprocessor__cat__selector__percentile": [10, 30, 50, 70],
    "classifier__C": [0.1, 1.0, 10, 100],
}

search_cv = RandomizedSearchCV(clf, param_grid, n_iter=10, random_state=0)
search_cv.fit(X_train, y_train)

print("Best params:")
print(search_cv.best_params_)
print(f"Internal CV score: {search_cv.best_score_:.3f}")

요약

이 실습에서는 파이프라인에서 범주형 및 수치형 데이터를 전처리하기 위해 ColumnTransformer를 사용하는 방법과 그리드 서치를 사용하여 파이프라인의 하이퍼파라미터를 튜닝하는 방법을 배웠습니다.