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

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

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

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

예를 들어 car_color라는 범주형 특성을 부분적으로 사용하여 자동차 가격을 예측하는 모델을 만들고 있다고 가정해 보겠습니다. 빨간색 자동차가 녹색 자동차보다 가치가 높을 수 있습니다. 제조업체에서 제공하는 외부 색상은 제한적이므로 car_color는 저차원 범주형 특성입니다. 다음 그림은 car_color의 어휘 (가능한 값)를 보여줍니다.

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

연습: 학습 내용 점검하기

참 또는 거짓: 머신러닝 모델은 '빨간색''검은색'과 같은 원시 문자열 값을 수치 벡터로 변환하지 않고 직접 학습할 수 있습니다.
거짓

색인 번호

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

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

문자열을 고유한 색인 번호로 변환한 후에는 모델이 값 간의 의미 있는 관계를 학습하는 데 도움이 되는 방식으로 데이터를 더 처리해야 합니다. 범주형 특성 데이터가 색인이 생성된 정수로 남아 있고 모델에 로드되면 모델은 색인이 생성된 값을 연속 부동 소수점 수로 처리합니다. 그러면 모델은 '보라색'이 '주황색'보다 6배 더 높다고 간주합니다.

원-핫 인코딩

다음 단계는 각 색인 번호를 원-핫 인코딩으로 변환하는 것입니다. 원-핫 인코딩의 경우:

  • 각 카테고리는 N개의 요소로 구성된 벡터 (배열)로 표시되며, 여기서 N은 카테고리 수입니다. 예를 들어 car_color에 가능한 카테고리가 8개 있는 경우 이를 나타내는 원-핫 벡터에는 8개의 요소가 있습니다.
  • 원핫 벡터의 요소 중 정확히 하나가 값 1.0을 갖고 나머지 모든 요소는 값 0.0을 갖습니다.

예를 들어 다음 표는 car_color의 각 인코딩에 대한 원-핫 인코딩을 보여줍니다.

기능 빨간색 주황색 파란색 노란색 초록색 검은색 보라색 갈색
"빨간색" 1 0 0 0 0 0 0 0
"오렌지" 0 1 0 0 0 0 0 0
"Blue" 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 "행복", "걷기"
US_postal_codes ~42,000 '02114', '90301'
last_names_in_Germany ~850,000 '슈미트', '슈나이더'

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

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

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

간단히 말해 해싱은 카테고리(예: 색상)를 소수 정수(해당 카테고리를 보유할 '버킷'의 수)에 매핑합니다.

자세히 살펴보면 해싱 알고리즘은 다음과 같이 구현됩니다.

  1. 카테고리 벡터의 빈 수를 N으로 설정합니다. 여기서 N은 남은 카테고리의 총 개수보다 작습니다. 임의의 예로 N = 100이라고 가정해 보겠습니다.
  2. 해시 함수를 선택합니다. 해시 값 범위도 선택하는 경우가 많습니다.
  3. 각 카테고리(예: 특정 색상)를 해시 함수를 통해 전달하여 해시 값(예: 89237)을 생성합니다.
  4. 각 빈에 출력 해시 값의 색인 번호를 N으로 나눈 나머지를 할당합니다. 이 경우 N이 100이고 해시 값이 89237이므로 89237 % 100이 37이므로 나머지 결과는 37입니다.
  5. 이러한 새 색인 번호를 사용하여 각 비트에 대한 원-핫 인코딩을 만듭니다.

데이터 해싱에 관한 자세한 내용은 프로덕션 머신러닝 시스템 모듈의 무작위화 섹션을 참고하세요.