코딜기
[Python/ML] 범주형 변수 인코딩(Encoding)처리 Label Encoding/One-hot Encoding 본문
ML & DL/Data Preprocessing
[Python/ML] 범주형 변수 인코딩(Encoding)처리 Label Encoding/One-hot Encoding
코딜기 2022. 2. 27. 18:22반응형
범주형 변수는 왜 인코딩을 해야 할까요??
- 범주형 변수를 분류 모델에 넣으면 모델은 데이터를 인식하지 못하고 에러가 발생합니다.
- 이를 해결하기 위해 범주형 변수를 수치형 변수로 인코딩 처리를 해줘야 합니다.
- 인코딩 방법으로 대표적으로 Label Encoding과 One-hot Encoding이 있습니다.
Label Encoding
- n개의 범주형 데이터를 0 ~ n-1의 연속적인 수치 데이터로 표현합니다.
- 인코딩 된 데이터들 간의 차이가 수치적인 차이가 아니기 때문에 데이터의 범주가 3개 이상일 때는 주의해서 사용해야 합니다.
- 두 개의 범주일 때는 독립적인 의미로 사용이 가능합니다.
- 라벨 인코딩은 한번 실행시킬 때 단 하나의 컬럼만 실행이 가능합니다.
- 트리 결정 나무의 분류 모델에서는 범주가 3개 이상이어도 라벨 인코딩을 사용해도 괜찮습니다.
from sklearn.preprocessing import LabelEncoder
# 라벨인코더 선언 및 Fitting
le = LabelEncoder()
le.fit(categorical_data)
# 인코딩한 데이터로 변환
le_encoded = le.transform(categorical_data)
# 결과물을 확인하면 array 형태로 나옵니다.
# 아래는 라벨 인코딩으로 만들어낸 데이터를 데이터 프레임으로 만들어주는 코드입니다.
new_cat = pd.DataFrame(le_encoded, columns = ['result'])
# 아래 코드를 실행시키면 인코딩된 class를 확인할 수 있습니다.
le.classes_
One-hot Encoding
- n개의 범주형 데이터를 n개의 비트(0,1) 벡터로 표현합니다.
- 원핫 인코딩을 하게 되면 서로 다른 범주에 대해서는 벡터 내적을 취했을 때 내적 값이 0이 나오게 됩니다.
- 이는 서로 다른 범주 데이터를 독립적인 의미로 사용이 가능하게 합니다.
- 라벨 인코딩과 달리 원핫 인코딩은 여러 범주형 변수를 한 번에 인코딩할 수 있습니다.
- 변수의 범주 수 만큼 차원이 확대되기 때문에 너무 많은 범주를 가진 변수를 원핫 인코딩을 할 때 주의해야 합니다.
from sklearn.preprocessing import OneHotEncoder
# 원핫인코더 선언 및 Fitting
ohe = OneHotEncoder(sparse=False)
ohe.fit(categorical_data)
# 인코딩한 데이터로 변환
ohe_encoded = ohe.transform(categorical_data)
# 결과물을 확인하면 array 형태로 나옵니다.
# 아래는 기존의 데이터와 원핫 인코딩으로 만들어낸 데이터를 concat하는 코드입니다.
new_cat = pd.DataFrame(ohe_encoded)
categorical_data = pd.concat([categorical_data, new_cat], axis=1)
# 아래 코드를 실행시키면 인코딩된 class를 확인할 수 있습니다.
ohe.categories_
반응형
'ML & DL > Data Preprocessing' 카테고리의 다른 글
[Python/ML] 머신러닝 데이터 셋 나누기 train_test_split/reset_index (2) | 2022.03.02 |
---|---|
[Python/ML] 결측치(Missing Value) 처리 fillna/SimpleImputer/IterativeImputer(MICE) (4) | 2022.02.26 |
[Python/ML] 결측치(Missing Value) 처리 isna/missingno/dropna (0) | 2022.02.26 |
[Python/ML] 스케일링(Scaling) Min-Max Scaling / Standard Scaling (0) | 2022.02.24 |
Comments