머신러닝 및 딥러닝/데이터 분석

ColumnTransformer (Encoding)

viamemine 2024. 5. 3. 15:44
728x90
반응형

 

데이터를 처리하다보면, categorical 데이터를 numerical 데이터로 변환해야 할 필요성을 느낍니다. 

이러한 변환을 encoding이라고 합니다.

다양한 목적과 자료의 특징에 맞추어, 올바르게 인코딩한 categorical 데이터는

모델의 퍼포먼스와 효율에 상당한 영향을 끼칩니다.

 

그러나, categorical 데이터의 인코딩은 생각보다 단순하지 않습니다. 

 

One Hot Encoding, Ordinal Encoding, Label Encoding, Target Encoding 등

종류도 다양하고 비슷한 인코딩도 library에 따라 크고 작은 차이가 있습니다.

 

ColumnTransformer는 make_column_transformer과 거의 동일한 기능을 제공합니다.

그럼 make_column_transformer부터 설명하겠습니다.

 

 


make_column_transformer

데이터를 마주해도 각 데이터의 변수마다 적합한 전처리를 해주어야 합니다.

예를 들어, categorical 데이터는 dummy화를 해주고

numerical 데이터는 normalizing을 해주어야 합니다.

 

이 때, normalizing 방법은 변수마다 다르게 적용할 필요도 있습니다.

 

변수가 많을수록 전처리 방법은 다양해지고,

이를 작업하기 위해 raw 데이터를 합치거나 자르는 등의 작업을 일일이 하는 것은 어렵습니다.

 

이 때 유용하게 사용하는 함수가 sklearn.compose.make_column_transformer 입니다.

 

from sklearn.compose import make_column_transformer

prepocess = make_column_transformer( (MinMaxScaler(), ['numeric']),
	(OneHotEncoder(handle_unknown='ignore'), ['categoric']))

 


 

ColumnTransformer

make_column_transformer처럼, 똑같이 array로 작동하며

instance 변수들을 저장하기 때문에

새로운 데이터셋을 마주해도 똑같은 차원으로 가공할 수 있습니다.

 

transformer = ColumnTransformer(transformer = [('Name', OneHotEncoder(), ['col1', 'col2'])])

 

ColumnTransformer 변수 안에, 이름, 작업할 함수, 선택할 컬럼을 입력합니다. 

make_column_transformer과의 차이점은 이름을 추가해준다는 것을 알 수 있겠습니다. 

 

또한 transformer 변수 자체가 list of tuples의 형태로 입력받는다는 것입니다.

 

make_column_transformer는 따로 리시트 안에

처리할 컬럼과 적용 방식을 담지 않았던 것과 차이를 보입니다.

 

만약, 선택한 변수가 categorical 데이터가 아니라 numerical 데이터라면 

다음과 같이 코드를 작성할 수 있습니다.

 

transformer = ColumnTransformer(transformers = [('Name', MinMaxScaler(), ['col3', 'col4'])])

 

 

 

728x90