본문 바로가기
Data Science/Machine Learning

ColumnTransformer 피처 이름 데이터프레임 전달 방법

by Queen2 2022. 10. 28.
728x90
반응형

이전에 columnTransformer이 무엇인지, 어떻게 사용할 수 있는지 내용을 다뤘었는데요

2022.10.13 - [Data Science/Machine Learning] - [ Scikit-learn ] compose.ColumnTransformer, make_column_transformer 정리

 

[ Scikit-learn ] compose.ColumnTransformer, make_column_transformer 정리

Column Transformer Column Transformer은 여러 transformer 을 column에 좀 더 쉽게 적용하도록 한 클래스입니다. 😎 주요 메서드 탐구 sklearn.compose.ColumnTransformer(transformers, *, remainder='drop', s..

psygo22.tistory.com

 

이 내용을 기반으로 실제 ColumnTransformer을 응용해보다가 새로운 문제를 만나서 정리해보려 합니다.

 

방법 1) transformers_

먼저 이렇게 column transformer에 넣을 Scaler와 원핫인코더를 호출해주고,

어떤 컬럼(열)에 넣을지 이름 리스트도 뽑아줍니다

 

from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.compose import make_column_transformer

num_cols = temp.select_dtypes(include=['int64','float64']).columns.tolist()
obj_cols = temp.select_dtypes(include=['object']).columns.tolist()


ct = make_column_transformer((StandardScaler(),num_cols),(OneHotEncoder(),obj_cols))

 

이 다음으로는 먼저 데이터프레임을 이 transformer에 fit 시켜줍니다

ct.fit(temp)

 

이제 중요한게 OneHotEncoder를 적용한 새로운 컬럼명을 어떻게 변환 후에 대응될 수 있을까? 라는 문제가 있습니다.

여기서 StandardScaler을 적용한 숫자형 컬럼명과 원핫인코더의 get_feature_names_out을 병합시켜주면 되는데요

 

col_names = num_cols + ct.transformers_[1][1].get_feature_names_out(obj_cols).tolist()
preprocessed_df = pd.DataFrame(ct.transform(temp),columns=col_names)
preprocessed_df

transformer을 적용하게 되면 transformers_ 라는 속성을 통해서 (name,transformer,column)의 튜플들이 반환되게 되는데요, 여기서 [1][1]은 2번째로 적용한 원핫인코더 변환기에서 transformer가 적용된 피처의 이름들을 리스트화 하는 것을 활용했습니다.

 

방법 2 ) 원핫인코딩 적용한 컬럼명 리스트 뽑는 방법 named_transformers

tx = ct.get_params()['transformers']
feature_names = []
for name,transformer,features in tx:
     try:
         Var = ct.named_transformers_[name].get_feature_names_out().tolist()
     except AttributeError:
         Var = features
     feature_names.append(Var)

 

이 방법은 column transformer의 named_transformers 기능을 활용한건데요

학습된 transformer을 이름으로 접근하기 때문에 [name]을 통해 호출하고 get_feature_names_out을 통해서 변환기에 의해 만들어진 컬럼명들을 반환합니다.

 

 

 

혹시 더 좋은 제안이나 오류가 있다면 언제든지 알려주시길 바랍니다!

728x90
반응형

댓글