머신러닝에 사용되는 대표적인 인코딩 방법에는 Label Encoder, One Hot Encoder 방식이 있다.
인코딩이 중요한 이유는 머신러닝에 들어가는 데이터가 어떤 데이터인지에 따라 성능이 좌우 되기 때문이다.
우선 기본적으로는 결측치(NULL)값은 허용되지 않는다. 데이터분석과는 다르게 머신러닝 모델을 돌리기 위해서는
결측치가 대부분이라면 해당 데이터 Feature 들은 제거 하는것이 좋다.
단순 아이디나, 관리번호 등 단순한 행의 식별역할로써 쓰이는 요소들은 예측에 중요한 요소가 절대 될 수 없고
오히려 알고리즘을 복잡하고 무겁게 만들어 예측 성능을 떨어뜨린다.
Label Encoder
레이블 인코딩은 Feature 들을 코드형 숫자값으로 변환 하는것이다. 레이블 인코딩은 문자열 데이터를 숫자형 카테고리로 변환해준다. 임의적으로 숫자가 할당 되기 때문에 특정 알고리즘에 이를 적용했을 때 성능이 저하 될 수 있는 문제점이 있다. 또한 숫자로 되어있어 가중치로 인식될수도 있어 왜곡(Bias)이 생길 수 있다. 이러한 이유로 선형회귀와 같은 알고리즘에는 적용하지 않는다. 의사결정트리 및 랜덤포레스트 머신러닝 알고리즘에는 이런 특성들이 반영되지 않으므로 레이블 인코딩이 자주 쓰인다.
예시
Country = ['France','Spain','Germany','Spain','Germany','France','Spain','France','Germany','France']
Age = [44,27,30,38,40,35,np.nan,48,50,37]
Salary=[72000,48000,54000,61000,np.nan,58000,52000,79000,83000,67000]
Purchased=['No','Yes','No','No','Yes','Yes','No','Yes','No','Yes']
df = pd.DataFrame({'Country': Country,
'Age': Age,
'Salary': Salary,
'Purchased': Purchased})
df
해당 데이터 프레임을 만든 후 레이블 인코더를 사용해보자.
le1= LabelEncoder()
country = le1.fit_transform(df.Country)
country
이렇게 변환되는 모습을 볼 수 있다.
le1.inverse_transform(country) #복구
또한 해당 코드로 다시 인코딩 전으로 복구 할 수 있다.
다만 , 주의점은 각각의 인코더를 사용해 각각 변환 해줬어야만 복구 가능하다.
One-Hot-Encoder
Feature 의 원래 값에 해당하는 columns 에만 1을 표시하고 나머지 컬럼에는 0을 표시하는 방법이다. 즉, 행 형태로 되어 있는 Feature 값을 차원 변환을 한 뒤, 원래의 값에 해당하는 컬럼에만 1을 표시하고 나머지엔 0을 표시하는 방법이다,!
예시
from sklearn.preprocessing import OneHotEncoder
ohe = OneHotEncoder()
ohe.fit_transform(df.Country.values.reshape(-1,1)).toarray()
France, Germany, Spain 이렇게 총 3개의 나라를 표시해 주기 위해 차원이 변환된 모습을 볼 수 있다.
원핫인코더는 단어의 개수가 늘어날 수록, 벡터를 저장하기 위해 필요한 공간이 계속 늘어난다는 단점이 있다. 이는 차원이 늘어 나는 것인데, 단어 집합의 크기가 곧 벡터의 차원 수가 됩니다. 이는 저장 공간 측면에서는 매우 비효율적인 표현 방법이라 할 수 있다.
'머신러닝 (Machine Learning)' 카테고리의 다른 글
[머신러닝] 데이터 유형과 데이터에 따른 시각화에 대하여 (0) | 2022.11.17 |
---|---|
[머신러닝] 범주형 데이터 (Categorical Data) (0) | 2022.11.17 |
[머신러닝] 비지도 학습 (Unsupervised learning) (2) | 2022.09.01 |
[머신러닝] 연관규칙학습 (Association rule learning) (2) | 2022.09.01 |
[머신러닝] 군집화와 분류 (Clustering & Classification) (0) | 2022.09.01 |
댓글