원 핫 인코딩은 왜 필요할까?
데이터를 컴퓨터에게 학습시키기 위해서 사람과 컴퓨터가 데이터를 이해하는 방식을 알면 좋을 것 같습니다.
사람은 데이터를 이해할 때 다차원적으로 이해해서, 예를 들면 시간적 흐름, 공간적인 관계, 시각적인 요소 등 사람은 그것을 쉽게 구분합니다.
컴퓨터에는 여러가지 프로그래밍 언어들이 있지만 그것도 사람이 데이터를 다루기에 편한 방식으로 발전되어왔고,
결국 개발 코드를 기계어로 번역하는 과정에서 인터프리터나 컴파일러를 통해 데이터를 0,1로 이해한다. 사람이 다른 사람들과 잘 소통하기 위해서는 그 사람의 소통 방식으로 대화하듯 컴퓨터에게도 가장 좋은 방식으로 전달해줘야한다.
원 - 핫 - 인코딩은 컴퓨터에게 데이터를 이해시키는 방법으로 가장 좋은 방법인 것 같습니다.
원 핫 인코딩이란?
[범주형 데이터] 를 모델에 적용하기 위해 숫자로 변환하는 방법 중 하나이며, 각 카테고리(컬럼)를 고유한 이진 벡터로 변환하여 사용합니다. 범주형 데이터를 0과 1로 이루어진 벡터 형태로 변환하는 것을 의미합니다.
장점
- 원-핫 인코딩은 범주 간의 임의적인 순서를 제거하여 데이터 분석 및 모델 학습에 도움을 준다
- 모델 학습 용이: 컴퓨터는 숫자 데이터를 더 잘 처리하기 때문에 원-핫 인코딩된 벡터 형태의 데이터를 사용하면 모델 학습이 더욱 효과적
단점
- 차원 증가: 범주가 많을 경우 벡터의 길이가 길어져 차원이 증가하고, 이는 계산량 증가 및 메모리 사용량 증가로 이어질 수 있습니다. 이러한 문제를 해결하기 위해 다른 인코딩 방법(예: 레이블 인코딩, 타겟 인코딩)을 고려할 수도 있음
사용
- 판다스(pandas)와 사이킷 런(Scikit-learn) 모듈 그리고 텐서플로우(TensorFlow) 프레임워크를 사용해서도 원 핫 인코딩을 할 수 있고, 파이썬 함수로도 원 핫 인코딩이 가능합니다.
판다스 코드
import pandas as pd
# 데이터 프레임 생성
df = pd.DataFrame({
'색상': ["빨강", "파랑", "초록", "파랑", "빨강"]
})
# 원 핫 인코딩 수행
df_one_hot = pd.get_dummies(df, columns=['색상'])
print(df_one_hot)
결과
색상_빨강 색상_파랑 색상_초록
0 1 0 0
1 0 1 0
2 0 0 1
3 0 1 0
4 1 0 0
처음에는 원 핫 인코딩을 하는 이유를 잘 알지 못했지만, 직접 해보면서 Dense Layer는 1차원 밖에 받아들이지 못해서 벡터 데이터로만 넣어줘야 한다는 사실을 깨달았다. 에러를 경험해야지만 깨닫지만, 이를 통해 더 기억에 깊이 남을 것 같다.
'배움 기록' 카테고리의 다른 글
K겹 교차검증(K-fold cross validation) (0) | 2024.06.18 |
---|---|
처음으로 돌아가기 (1) | 2024.06.18 |
머신러닝 기본 개념 정리 (2) | 2024.06.11 |
아이펠 취업 특강을 듣고 내용 정리 (0) | 2024.05.31 |
마크다운 정리 (0) | 2024.05.14 |