아래 내용들은 제가 혼자 학습하면서 정리한 내용들입니다.
'부족한 내용' 혹은 '잘못된 내용'이 있을 수 있습니다.
댓글 남겨주시면 더욱 공부하고 수정하도록 하겠습니다.
감사합니다.
데이터 인코딩
- 머신러닝을 위한 대표적인 인코딩 방식 : 레이블 인코딩(Label Encoding) & 원-핫 인코딩(One Hot Encoding)
- 레이블 인코딩은 범주형 데이터의 피처를 unique한 코드형 숫자값으로 변환하는 방식
- 원-핫 인코딩은 피처 값의 유형에 따라 새로운 피처를 추가해 고유 값에 해당하는 컬럼에만 1을 표시하고 나머지 컬럼에는 0을 표시하는 방식
레이블 인코딩
- Scikit Learn의 LabelEncoder 클래스로 구현
from sklearn.preprocessing import LabelEncoder
items=['TV', '냉장고', '전자레인지', '컴퓨터', '선풍기', '선풍기', '믹서', '믹서']
LabelEncoder를 객체로 생성한 후, fit()과 transform()으로 레이블 인코딩 수행
# LabelEncoder를 객체로 생성한 후, fit()과 transform()으로 레이블 인코딩 수행.
encoder = LabelEncoder()
encoder.fit(items)
labels = encoder.transform(items)
print('인코딩 변환값:', labels)
>> 인코딩 변환값: [0 1 4 5 3 3 2 2]
LabelEncoder 속성들
# 인코딩 클래스 확인
print('인코딩 클래스:', encoder.classes_)
>> 인코딩 클래스: ['TV' '냉장고' '믹서' '선풍기' '전자레인지' '컴퓨터']
# 디코딩 원본값 확인
print('디코딩 원본값:', encoder.inverse_transform([4, 5, 2, 0, 1, 1, 3, 3]))
>> 디코딩 원본값: ['전자레인지' '컴퓨터' '믹서' 'TV' '냉장고' '냉장고' '선풍기' '선풍기']
문제점
- 간단하게 문자열 값을 숫자형 카테고리 값으로 변환
- 숫자 값에 크고 작음에 대한 ordinal한 특성이 반영되기 독립적인 관측값간의 관계성이 생긴다.
- 몇몇 ML 알고리즘에서 가중치가 더 부여되거나 중요하게 인식하는 등, 예측 성능이 떨어지는 경우 발생
- 선형회귀와 같은 ML 알고리즘 보다는 트리 계열의 알고리즘에서 더 적합하다.
원-핫 인코딩(One-Hot Encoding)
- 레이블 인코딩의 문제점을 해결하기 위한 인코딩
- Scikit Learn의 OneHotEncoderEncoder 클래스로 변환 가능
- 입력값으로 2차원 데이터가 필요
- 변환한 값이 Sparse Matrix 형태이므로 toarray()를 이용해 Dense Matrix로 변환 필요
- Pandas get_dummies() 메서드를 사용하여 쉽게 변환이 가능
from sklearn.preprocessing import OneHotEncoder
import numpy as np
items = ['TV', '냉장고', '전자레인지', '컴퓨터', '선풍기', '믹서', '믹서']
2차원 ndarray로 변환
# 2차원 ndarray로 변환
items = np.array(items).reshape(-1, 1)
원-핫 인코딩 적용
# 원-핫 인코딩 적용
oh_encoder = OneHotEncoder()
oh_encoder.fit(items)
oh_labels = oh_encoder.transform(items)
OneHotEncoder로 변환한 결과를 밀집 행렬로 변환
print('원-핫 인코딩 데이터')
print(oh_labels.toarray())
print('원-핫 인코딩 데이터 차원')
print(oh_labels.shape)
>> 원-핫 인코딩 데이터
[[1. 0. 0. 0. 0. 0.]
[0. 1. 0. 0. 0. 0.]
[0. 0. 0. 0. 1. 0.]
[0. 0. 0. 0. 0. 1.]
[0. 0. 0. 1. 0. 0.]
[0. 0. 1. 0. 0. 0.]
[0. 0. 1. 0. 0. 0.]]
원-핫 인코딩 데이터 차원
(7, 6)
Pandas get_dummies() 이용
import pandas as pd
df = pd.DataFrame({'item':['TV', '냉장고', '전자레인지', '컴퓨터', '선풍기', '믹서', '믹서']})
pd.get_dummies(df)
Reference
- 위키북스 ‘파이썬 머신러닝 완벽 가이드’ https://wikibook.co.kr/pymlrev2/
파이썬 머신러닝 완벽 가이드(개정2판): 다양한 캐글 예제와 함께 기초 알고리즘부터 최신 기법
자세한 이론 설명과 파이썬 실습을 통해 머신러닝을 완벽하게 배울 수 있습니다! 《파이썬 머신러닝 완벽 가이드》는 이론 위주의 머신러닝 책에서 탈피해, 다양한 실전 예제를 직접 구현해 보
wikibook.co.kr
sklearn.preprocessing.LabelEncoder
scikit-learn.org
sklearn.preprocessing.OneHotEncoder
Examples using sklearn.preprocessing.OneHotEncoder: Release Highlights for scikit-learn 1.1 Release Highlights for scikit-learn 1.1 Release Highlights for scikit-learn 1.0 Release Highlights for sc...
scikit-learn.org
레이블인코딩(Label Encoding) vs 원핫인코딩(One-hot Encoding) 비교
컴퓨터는 인간의 언어를 이해하지 못한다. 우리가 컴퓨터에 한글을 입력한다 해도 컴퓨터가 받아들이는 것은 0과 1의 이진수로 이해를 하게된다. 따라서 우리가 머신러닝/딥러닝을 할 때 문자열
hye-z.tistory.com
...끝
'ML & DL > Machine Learning' 카테고리의 다른 글
[ML] Logistic Regression (0) | 2023.01.10 |
---|---|
[ML] 선형 회귀(Linear, Polynomial, Multiple) (0) | 2022.12.19 |
[ML] Data Pre-processing : Scaling (0) | 2022.12.16 |
[ML] KNN(K-Nearest Neighbor) (2) | 2022.12.12 |
[ML] 지도 학습, 비지도 학습, 강화 학습 (3) | 2022.12.09 |
댓글