원 핫 인코딩
머신러닝 알고리즘은 문자열 데이터 속성을 입력받지 않으며 모든 데이터는 숫자형으로 표현되어야 합니다.
따라서 문자형 카테고리형 속성은 모두 숫자 값으로 변환/인코딩 되어야 합니다.
원 핫 인코딩 기법은 입력 데이터를 숫자 벡터로 변환하는 방법으로, 각 입력 데이터의 특성을 0과 1의 이진 벡터로 표현합니다.
예를 들어, 내가 학습시킬 데이터에 사과/바나나/포도 라는 데이터가 있다면 아래와 같이 3개의 컬럼이 있는 형식으로 표현할 수 있습니다.
1 | (여기가 1이면 사과), (여기가 1이면 바나나), (여기가 1이면 포도) |
즉, 각 숫자는 단어의 인덱스를 나타내며, 해당 단어의 인덱스에 해당하는 값만 1로 설정되고 나머지 값은 0으로 설정됩니다.
또 다른 예를 들어보겠습니다.
만일 아래와 같은 문장을 단어단위로 원 핫인코딩을 한다면,
1 | 나랑 점심 먹으러 갈래 점심 메뉴는 김치찌개야 |
아래와 같이 6개의 값으로 이뤄진 벡터를 만들 수 있습니다.
1 | (나랑), (점심), (먹으러), (갈래), (메뉴는), (김치찌개야) |
원 핫 인코딩의 장점
이러한 원 핫 인코딩은 다음과 같은 장점이 있습니다.
1.데이터의 크기를 줄일 수 있습니다.
이진 벡터로 변환되기 때문에, 입력 데이터의 크기가 줄어듭니다.
이는 메모리 사용량을 줄이고, 머신러닝 모델의 학습 속도를 향상시키는 데 도움이 됩니다.
2.데이터의 누락을 방지할 수 있습니다.
입력 데이터의 특성이 누락되어도, 해당 특성의 값을 0으로 설정하여 처리할 수 있습니다.
3.모델의 해석성을 높일 수 있습니다.
이진 벡터로 변환되기 때문에, 모델의 출력을 쉽게 해석할 수 있습니다.
예를 들어, 모델의 출력이 (1, 0, 0)이라면, 이는 해당 단어가 ‘사과’라는 것을 의미합니다.
원 핫 인코딩의 단점
하지만 원 핫 인코딩은 다음과 같은 단점이 있습니다.
1.차원의 저주(Curse of dimensionality)
입력 데이터의 특성이 많아질수록, 이진 벡터의 차원이 증가합니다.
이는 머신러닝 모델의 학습 속도를 저하시키고, 과적합(overfitting)을 유발할 수 있습니다.
예를 들어, 앞선 예제에서 수박이란 데이터가 추가가 된다면, 아래와 같이 표현을 해야할것이고,
1 | (여기가 1이면 사과), (여기가 1이면 바나나), (여기가 1이면 포도), (여기가 1이면 수박) |
사과는 (1, 0, 0, 0)으로, 수박은 (0, 0, 0, 1)과 같은 식으로 표현될 것입니다.
2.불변성(invariance)이 없습니다.
입력 데이터의 순서나 위치가 변경되면, 이진 벡터의 값도 변경됩니다.
이는 머신러닝 모델의 성능을 저하시킬 수 있습니다.