꼭 실제값을 원-핫 벡터로 표현해야만 다중 클래스 분류 문제를 풀 수 있는 것은 아님.
대부분의 다중 클래스 분류 문제가 각 클래스 간의 관계가 균등하다는점에서 원 - 핫 벡터는 이러한 점을 표현할 수 있는 적절한 방법이다.
다수의 클래스를 분류하는 문제에서는 이진 분류처럼 2 개의 숫자 레이블이 아니라 클래스의 개수만큼 숫자 레이블이 필요하다.
- 레이블링 방법 : 분류해야 할 클래스 전체에 정수 인코딩
예 ) 분류해야 할 레이블이 {red, green, blue}와 같이 3개라면 각각 0, 1, 2로 레이블
예 ) 분류해야 할 클래스가 4개고 인덱스를 숫자 1부터 시작하고 싶다고 하면
{baby, child, adolescent, adult}라면 1, 2, 3, 4로 레이블
그런데 일반적인 다중 클래스 분류문제 레이블링 시 정수 인코딩 보다 원-핫 인코딩을 사용한다.
원 - 핫 벡터를 사용하는 이유가 무엇일까 ?
Banana, Tomato, Apple라는 3개의 클래스가 존재하는 문제가 있다고 해보자.
레이블은 정수 인코딩을 사용하여 각각 1, 2, 3을 부여하였다.
손실 함수로 선형 회귀 실습에서 배운 평균 제곱 오차 MSE를 사용하면 정수 인코딩이 어떤 오해를 불러일으킬 수 있는지 확인할 수 있습니다.

- 실제값이 Tomato일때 예측값이 Banana이었다면 제곱 오차 : (2 - 1) ^2
- 실제값이 Apple일때 예측값이 Banana이었다면 제곱 오차 : (3 - 1) ^2
즉, Banana과 Tomato 사이의 오차보다 Banana과 Apple의 오차가 더 크다.
이는 기계에게 Banana가 Apple보다는 Tomato에 더 가깝다는 정보를 주는 것과 다름없다.
정수 인코딩은 언제 사용할까 ?
→ 각 클래스가 순서의 의미를 갖고 있어서 회귀를 통해서 분류 문제를 풀 수 있는 경우
예) {baby, child, adolescent, adult}나 {1층, 2층, 3층, 4층}이나 {10대, 20대, 30대, 40대}와 같은 경우
하지만 일반적인 분류 문제에서는 각 클래스는 순서의 의미를 갖고 있지 않으므로 각 클래스 간의 오차는 균등한 것이 옳다.
정수 인코딩과 달리 원-핫 인코딩은 분류 문제 모든 클래스 간의 관계를 균등하게 분배합니다.
다르게 표현하면 모든 클래스에 대해서 원-핫 인코딩을 통해 얻은 원-핫 벡터들은 모든 쌍에 대해서 유클리드 거리를 구해도 전부 유클리드 거리가 동일하다.
원-핫 벡터는 이처럼 각 클래스의 표현 방법이 무작위성을 가진다는 점을 표현할 수 있다.
'파이썬 > 머신러닝,딥러닝' 카테고리의 다른 글
| ReLU 와 ReLU 의 변형들 ; 기울기 소실 문제 (0) | 2022.05.28 |
|---|---|
| 3차원에서의 hstack , vstack (0) | 2022.05.26 |
| 하이퍼볼릭 탄젠트(tanh) 를 사용하는 이유 (0) | 2022.05.19 |
| 비선형 SVM (커널 SVM) gamma (0) | 2022.05.12 |
| train_test_split 에서 stratify 의 의미 (0) | 2022.04.15 |