728x90
반응형
이전에 columnTransformer이 무엇인지, 어떻게 사용할 수 있는지 내용을 다뤘었는데요
이 내용을 기반으로 실제 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
반응형
'Data Science > Machine Learning' 카테고리의 다른 글
LightGBM 파라미터 튜닝 가이드 정리 (0) | 2022.10.31 |
---|---|
StackingCVRegressor 개념 및 활용방법 정리 (0) | 2022.10.31 |
회귀 평가 지표 개념 A-Z 및 활용방법 이해하기 (0) | 2022.10.19 |
K-Nearest Neighbors 최근접 이웃 알고리즘 정리 A-Z (0) | 2022.10.19 |
Train , Test 데이터 전처리를 위해 병합하는 방법 정리 ! (0) | 2022.10.13 |
댓글