차원이라는 용어는 특징 벡터의 요소 수와 동의어입니다. 일부 범주형 특성은 저차원입니다. 예를 들면 다음과 같습니다.
기능 이름 | 카테고리 수 | 샘플 카테고리 |
---|---|---|
snowed_today | 2 | 참, 거짓 |
skill_level | 3 | 초보자, 실무자, 전문가 |
season | 4 | 겨울, 봄, 여름, 가을 |
day_of_week | 7 | 월요일, 화요일, 수요일 |
행성 | 8 | 수성, 금성, 지구 |
범주형 특성에 가능한 카테고리 수가 적으면 이를 어휘로 인코딩할 수 있습니다. 어휘 인코딩을 사용하면 모델은 가능한 각 범주형 값을 별도의 특성으로 취급합니다. 학습 중에 모델은 각 카테고리에 대해 서로 다른 가중치를 학습합니다.
예를 들어 car_color
라는 범주형 특성을 부분적으로 기반으로 자동차 가격을 예측하는 모델을 만든다고 가정해 보겠습니다.
아마도 빨간색 자동차가 초록색 자동차보다 더 가치가 있을 것입니다.
제조업체에서 제공하는 외장 색상은 제한적이므로 car_color
는 저차원 범주형 특성입니다.
다음 그림은 car_color
의 어휘 (가능한 값)를 제안합니다.
연습문제: 직관력 테스트
"Red"
은(는) 부동 소수점 숫자가 아닙니다. "Red"
와 같은 문자열은 부동 소수점 숫자로 변환해야 합니다.
색인 번호
머신러닝 모델은 부동 소수점 수만 조작할 수 있습니다. 따라서 다음 그림과 같이 각 문자열을 고유한 색인 번호로 변환해야 합니다.
연습문제: 직관력 테스트
"Black"
(색인 번호 5)가 "Orange"
(색인 번호 1)보다 모델에 5배 더 의미가 있다고 간주합니다.
"Black"
(색인 번호 5)이 "Orange"
(색인 번호 1)보다 모델에 5배 더 의미 있는 것으로 간주합니다.
원-핫 인코딩
다음 단계는 각 색인 번호를 원-핫 인코딩으로 변환하는 것입니다. 원-핫 인코딩의 경우:
- 각 카테고리는 N개의 요소로 구성된 벡터(배열)로 표시되며, 여기서 N은 카테고리 수입니다. 예를 들어
car_color
에 가능한 카테고리가 8개 있는 경우 이를 나타내는 원-핫 벡터에는 8개의 요소가 있습니다. - 원-핫 벡터의 요소 중 정확히 하나의 값이 1.0이고 나머지 모든 요소의 값은 0.0입니다.
예를 들어 다음 표는 car_color
의 각 인코딩에 대한 원-핫 인코딩을 보여줍니다.
기능 | 빨간색 | Orange | 파란색 | 노란색 | 초록색 | 검은색 | 보라색 | 갈색 |
---|---|---|---|---|---|---|---|---|
"빨간색" | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
"오렌지" | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
"파란색" | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
'노란색' | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
'녹색' | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
"검은색" | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
"Purple" | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
"갈색" | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
특성 벡터에 전달되는 것은 문자열이나 인덱스 번호가 아닌 원-핫 벡터입니다. 모델은 특성 벡터의 각 요소에 대해 별도의 가중치를 학습합니다.
다음 그림은 어휘 표현의 다양한 변환을 보여줍니다.
희소 표현
값이 대부분 0이거나 비어 있는 특징을 희소 특징이라고 합니다. car_color
와 같은 많은 범주형 특성은 희소한 특성인 경향이 있습니다.
희소 표현은 1.0의 위치를 희소 벡터에 저장하는 것을 의미합니다. 예를 들어 "Blue"
의 원-핫 벡터는 다음과 같습니다.
[0, 0, 1, 0, 0, 0, 0, 0]
1
가 2번 위치에 있으므로(0부터 집계 시작) 위의 원-핫 벡터의 희소 표현은 다음과 같습니다.
2
희소 표현은 8개의 요소를 갖는 원-핫 벡터보다 메모리를 훨씬 적게 소비합니다. 중요한 점은 모델은 희소 표현이 아닌 원-핫 벡터를 기반으로 학습해야 한다는 것입니다.
범주형 데이터의 이상치
숫자 데이터와 마찬가지로 범주형 데이터에도 이상치가 포함됩니다. car_color
에 인기 있는 색상뿐만 아니라 "Mauve"
또는 "Avocado"
와 같이 거의 사용되지 않는 일부 색상도 포함되어 있다고 가정해 보겠습니다.
이러한 예외 색상에 각각 별도의 카테고리를 지정하는 대신 외부 단어(OOV)라는 단일 '포괄적' 카테고리로 묶을 수 있습니다. 즉, 모든 외부값 색상이 단일 외부값 버킷으로 분류됩니다. 시스템은 이 특이값 버킷에 대한 단일 가중치를 학습합니다.
고차원 범주형 특성 인코딩
다음 표와 같이 일부 범주형 특성에는 차원이 많습니다.
기능 이름 | 카테고리 수 | 샘플 카테고리 |
---|---|---|
words_in_english | ~500,000 | "happy", "walking" |
US_postal_codes | 약 42,000명 | '02114', '90301' |
last_names_in_Germany | 약 850,000명 | '슈미트', '슈나이더' |
카테고리 수가 많으면 일반적으로 원-핫 인코딩을 사용하지 않는 것이 좋습니다. 별도의 임베딩 모듈에 자세히 설명된 임베딩이 일반적으로 훨씬 더 나은 선택입니다. 임베딩은 차원 수를 크게 줄여 모델에 두 가지 중요한 이점을 제공합니다.
- 일반적으로 모델의 학습 속도가 더 빠릅니다.
- 빌드된 모델은 일반적으로 더 빠르게 예측을 추론합니다. 즉, 모델의 지연 시간이 더 짧습니다.
해싱(해싱 트릭이라고도 함)은 덜 일반적인 차원 수 줄이기 방법입니다.