범주형 데이터: 어휘 및 원-핫 인코딩

차원이라는 용어는 특징 벡터의 요소 수와 동의어입니다. 일부 범주형 특성은 저차원입니다. 예를 들면 다음과 같습니다.

기능 이름 카테고리 수 샘플 카테고리
snowed_today 2 참, 거짓
skill_level 3 초보자, 실무자, 전문가
season 4 겨울, 봄, 여름, 가을
day_of_week 7 월요일, 화요일, 수요일
행성 8 수성, 금성, 지구

범주형 특성에 가능한 카테고리 수가 적으면 이를 어휘로 인코딩할 수 있습니다. 어휘 인코딩을 사용하면 모델은 가능한 각 범주형 값을 별도의 특성으로 취급합니다. 학습 중에 모델은 각 카테고리에 대해 서로 다른 가중치를 학습합니다.

예를 들어 car_color라는 범주형 특성을 부분적으로 기반으로 자동차 가격을 예측하는 모델을 만든다고 가정해 보겠습니다. 아마도 빨간색 자동차가 초록색 자동차보다 더 가치가 있을 것입니다. 제조업체에서 제공하는 외장 색상은 제한적이므로 car_color는 저차원 범주형 특성입니다. 다음 그림은 car_color의 어휘 (가능한 값)를 제안합니다.

그림 1. 팔레트의 각 색상은 별도의 지형지물로 표시됩니다. 즉, 각 색상은 특성 벡터에서 별도의 특성입니다.
      예를 들어 '빨간색'은 특징이고 '오렌지색'은 별도의 특징입니다.
그림 1. 카테고리별 고유한 기능입니다.

연습문제: 직관력 테스트

참 또는 거짓: 머신러닝 모델은 'Red''Black'과 같은 원시 문자열 값을 숫자 벡터로 변환하지 않고도 직접 학습시킬 수 있습니다.
학습 중에는 모델이 부동 소수점 수만 조작할 수 있습니다. 문자열 "Red"은(는) 부동 소수점 숫자가 아닙니다. "Red"와 같은 문자열은 부동 소수점 숫자로 변환해야 합니다.
거짓
머신러닝 모델은 부동 소수점 값이 있는 특성에 대해서만 학습할 수 있으므로 학습 전에 해당 문자열을 부동 소수점 값으로 변환해야 합니다.

색인 번호

머신러닝 모델은 부동 소수점 수만 조작할 수 있습니다. 따라서 다음 그림과 같이 각 문자열을 고유한 색인 번호로 변환해야 합니다.

그림 2. 각 색상은 고유한 정수 값과 연결됩니다. 예를 들어 '빨간색'은 정수 0과 연결되고 '오렌지색'은 정수 1과 연결됩니다.
그림 2. 색인이 생성된 지형지물

연습문제: 직관력 테스트

모델은 그림 2에 표시된 색인 번호를 기반으로 직접 학습해야 하나요?
모델이 색인 번호로 학습된 경우 각 색인 번호를 숫자 값으로 잘못 처리하고 "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

특성 벡터에 전달되는 것은 문자열이나 인덱스 번호가 아닌 원-핫 벡터입니다. 모델은 특성 벡터의 각 요소에 대해 별도의 가중치를 학습합니다.

다음 그림은 어휘 표현의 다양한 변환을 보여줍니다.

그림 3. 카테고리를 특성 벡터에 매핑하는 엔드 투 엔드 프로세스의 다이어그램 다이어그램에서 입력 지형지물은 '노란색', '주황색', '파란색', '파란색'(두 번째)입니다.  시스템은 저장된 어휘('빨간색'은 0, '오렌지색'은 1, '파란색'은 2, '노란색'은 3 등)을 사용하여 입력 값을 ID에 매핑합니다. 따라서 시스템은 '노란색', '주황색', '파란색', '파란색'을 3, 1, 2, 2에 매핑합니다. 그런 다음 시스템은 이러한 값을 원-핫 특성 벡터로 변환합니다. 예를 들어 가능한 색상이 8개인 시스템에서 3은 0, 0, 0, 1, 0, 0, 0, 0이 됩니다.
그림 3. 카테고리를 특성 벡터에 매핑하는 엔드 투 엔드 프로세스입니다.

희소 표현

값이 대부분 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명 '슈미트', '슈나이더'

카테고리 수가 많으면 일반적으로 원-핫 인코딩을 사용하지 않는 것이 좋습니다. 별도의 임베딩 모듈에 자세히 설명된 임베딩이 일반적으로 훨씬 더 나은 선택입니다. 임베딩은 차원 수를 크게 줄여 모델에 두 가지 중요한 이점을 제공합니다.

  • 일반적으로 모델의 학습 속도가 더 빠릅니다.
  • 빌드된 모델은 일반적으로 더 빠르게 예측을 추론합니다. 즉, 모델의 지연 시간이 더 짧습니다.

해싱(해싱 트릭이라고도 함)은 덜 일반적인 차원 수 줄이기 방법입니다.