원핫 인코딩(One-Hot Encoding)은 딥러닝에서 범주형 데이터(categorical data)를 수치형 데이터로 변환할 때 자주 사용되는 방법입니다. 이 방법은 각 범주형 값을 고유한 벡터로 표현해 모델이 이해할 수 있도록 하는데, 그 과정에서 특정 범주에 해당하는 위치만 1이고 나머지는 0인 벡터를 생성합니다.
예시를 통해 설명
예를 들어, '과일'이라는 범주형 변수에 '사과', '바나나', '체리'라는 세 가지 범주가 있다고 가정해봅시다. 이 범주를 원핫 인코딩으로 변환하면 다음과 같은 벡터로 나타낼 수 있습니다:
'사과' → [1, 0, 0]
'바나나' → [0, 1, 0]
'체리' → [0, 0, 1]
이렇게 각 범주가 벡터의 한 위치에 매핑되어 고유한 인덱스를 가집니다. 이 과정에서 특정 범주에 해당하는 인덱스에만 1이 있고, 나머지는 0이 됩니다.
왜 원핫 인코딩을 사용할까?
딥러닝 모델은 주로 수치형 데이터만을 처리할 수 있기 때문에 범주형 데이터를 그대로 사용할 수 없습니다.
예를 들어, '사과', '바나나', '체리'라는 범주를 0, 1, 2로 라벨링해서 모델에 넣는다면, 모델이 2가 1보다 크고, 1이 0보다 크다는 식으로 수치적인 관계를 학습하게 될 위험이 있습니다. 실제로는 과일 간에 수치적인 순서나 크기 비교가 의미가 없기 때문에, 이를 방지하기 위해 원핫 인코딩을 사용하여 각 범주가 서로 독립적인 값으로 인식되도록 만드는 것입니다.
원핫 인코딩의 특징과 단점
*고유한 인코딩
각 범주마다 고유한 벡터를 가지며, 두 벡터 간의 유사성은 없습니다.
*차원의 증가
범주의 수가 많아질수록 인코딩된 벡터의 차원도 커집니다. 예를 들어, 100개의 범주가 있다면 원핫 인코딩 후 벡터 길이도 100이 되므로 차원이 급격히 증가하는 문제가 생길 수 있습니다.
*희소 벡터(Sparse Vector)
벡터의 대부분의 값이 0이기 때문에 공간을 많이 차지하게 되고 계산 비용도 늘어날 수 있습니다.
원핫 인코딩을 실제로 어떻게 구현할까?
파이썬의 pandas나 sklearn 라이브러리를 사용하면 원핫 인코딩을 쉽게 적용할 수 있습니다. 예를 들어 pandas에서 get_dummies() 메서드를 사용하여 원핫 인코딩할 수 있습니다.
import pandas as pd
# 데이터프레임 생성
df = pd.DataFrame({'과일': ['사과', '바나나', '체리', '사과']})
# 원핫 인코딩 수행
one_hot = pd.get_dummies(df['과일'])
print(one_hot)
이 코드는 각 범주가 1과 0으로 변환된 결과를 출력합니다.
딥러닝에서의 원핫 인코딩
딥러닝 모델에서 입력값으로 원핫 인코딩된 벡터를 사용하면 각 범주가 신경망에서 독립적인 입력값으로 처리됩니다.
이 벡터는 주로 모델의 임베딩 레이어나 Dense 레이어에 전달되어 학습에 활용됩니다. 하지만 범주가 너무 많을 경우, 모델이 과도한 차원의 입력을 받게 되어 과적합(overfitting) 문제가 생길 수 있기 때문에 경우에 따라서는 임베딩(Embedding) 기법을 사용하기도 합니다.
원핫 인코딩은 특히 NLP나 이미지 처리 분야에서 범주형 데이터로 작업할 때 자주 사용되며, 모델이 각 범주를 개별적으로 처리할 수 있게 하는 중요한 역할을 합니다.
'AI > 관련 자료' 카테고리의 다른 글
[머신러닝] 활성 함수(Activation function)란? (0) | 2024.11.15 |
---|---|
[머신러닝] 손실 함수(Loss Function)란? (0) | 2024.11.15 |
[딥러닝] 텐서플로 케라스란? / TensorFlow Keras (0) | 2024.11.14 |
[머신러닝] 차원 축소와 주성분 분석 (0) | 2024.11.11 |
[머신러닝] 비지도 학습 k-평균 / K-means (0) | 2024.11.08 |