표현: 특성 추출

기존 프로그래밍에서는 코드에 중점을 둡니다. 머신러닝 프로젝트에서는 표현에 초점이 맞춰집니다. 즉, 개발자가 모델을 다듬는 한 가지 방법은 특성을 추가하고 개선하는 것입니다

원시 데이터를 특성에 매핑

그림 1의 왼쪽은 입력 데이터 소스의 원시 데이터를 나타내고, 오른쪽은 특성 벡터, 즉 데이터 세트의 예를 구성하는 부동 소수점 값의 집합입니다. 특성 추출이란 원시 데이터를 특성 벡터로 변환하는 과정입니다. 특성 추출에 상당한 시간이 걸릴 것으로 예상됩니다.

많은 머신러닝 모델은 특성 값에 모델 가중치를 곱해야 하므로 특성을 실수 벡터로 표현해야 합니다.

특성 추출이라는 과정을 통해 원시 데이터가 특성 벡터에 매핑됩니다.

그림 1. 특성 추출을 통해 원시 데이터를 ML 특성에 매핑

숫자 값 매핑

정수 및 부동 소수점 데이터에는 숫자 가중치를 곱할 수 있으므로 특별한 인코딩이 필요하지 않습니다. 그림 2에 제안된 것처럼 원시 정수 값 6을 특성 값 6.0으로 변환하는 것은 간단한 작업입니다.

원시 데이터에서 직접 복사할 수 있는 특성의 예

그림 2. 정수 값을 부동 소수점 값에 매핑

범주형 값 매핑

범주형 특성은 가능한 값의 이산 집합을 갖습니다. 예를 들어 다음과 같은 옵션이 있는 street_name라는 기능이 있을 수 있습니다.

{'Charleston Road', 'North Shoreline Boulevard', 'Shorebird Way', 'Rengstorff Avenue'}

모델은 학습된 가중치로 문자열을 곱할 수 없으므로 특성 추출을 사용하여 문자열을 숫자 값으로 변환합니다.

이는 가능한 값의 어휘로 지칭할 특성 값에서 정수로의 매핑을 정의하여 수행할 수 있습니다. 데이터 세트에 전 세계의 모든 거리가 나타나는 것은 아니기 때문에 다른 모든 거리를 OOV (어휘 범위 외) 버킷이라고 하는 포괄적인 '기타' 카테고리로 그룹화할 수 있습니다.

이 접근 방식을 사용하여 거리 이름을 숫자로 매핑하는 방법은 다음과 같습니다.

  • Charleston Road를 0으로 매핑
  • North Shoreline Boulevard를 1로 매핑
  • Shorebird Way를 2로 매핑
  • Rengstorff Avenue를 3으로 매핑
  • 그 외 모든 항목 (OOV)을 4로 매핑

그러나 이러한 색인 번호를 모델에 직접 통합하면 문제가 될 수 있는 몇 가지 제약 조건이 발생합니다.

  • 모든 거리에 적용되는 단일 가중치를 학습할 것입니다. 예를 들어 street_name의 가중치 6을 학습하면 Charleston Road에는 0을 곱하고 North Shoreline Boulevard에는 1을, Shorebird Way에는 2를 곱합니다. street_name를 특성으로 사용하여 주택 가격을 예측하는 모델이 있다고 가정해 보겠습니다. 도로명을 바탕으로 가격이 선형적으로 조정될 가능성은 없습니다. 또한 평균 주택 가격을 기준으로 거리의 순서를 지정했다고 가정할 수 있습니다. 모델은 거리마다 서로 다른 가중치를 학습할 수 있는 유연성이 필요합니다. 이러한 가중치는 다른 특성을 사용하여 추정한 가격에 더해집니다.

  • street_name가 여러 값을 취할 수 있는 사례는 고려하지 않습니다. 예를 들어 두 거리가 만나는 모퉁이에 주택이 여러 개 있는데 street_name 값에 단일 색인이 포함된 경우 이 정보를 인코딩할 방법이 없습니다.

이러한 제약 조건을 모두 제거하려면 모델의 범주형 특성마다 다음과 같이 값을 나타내는 바이너리 벡터를 만들면 됩니다.

  • 예시에 적용되는 값의 경우 해당하는 벡터 요소를 1로 설정합니다.
  • 다른 요소는 모두 0로 설정합니다.

이 벡터의 길이는 어휘에 있는 요소의 수와 같습니다. 이러한 표현은 단일 값이 1일 때 원-핫 인코딩, 여러 값이 1일 때 멀티-핫 인코딩이라고 합니다.

그림 3은 특정 거리인 Shorebird Way에 대한 원-핫 인코딩을 보여줍니다. Shorebird Way의 바이너리 벡터에 있는 요소의 값은 1이고 다른 모든 거리의 요소 값은 0입니다.

문자열 값 매핑 (

그림 3. 원-핫 인코딩을 통한 상세 주소 매핑

이 접근 방식은 모든 특성 값(예: 거리 이름)에 대한 부울 변수를 효과적으로 만듭니다. 여기서 집이 Shorebird Way에 있는 경우 이진 값은 Shorebird Way의 경우에만 1입니다. 따라서 모델은 Shorebird Way의 가중치만 사용합니다.

마찬가지로 집이 두 거리가 만나는 모퉁이에 있는 경우에는 2개의 이진수 값이 1로 설정되며 모델은 각각의 가중치를 모두 사용합니다.

희소 표현

데이터 세트에 street_name의 값으로 포함하려는 거리 이름이 1,000,000개가 있다고 가정해 보겠습니다. 요소 1개 또는 2개만 true인 요소 1,000,000개로 이루어진 바이너리 벡터를 명시적으로 만드는 것은 벡터를 처리할 때 저장용량 및 계산 시간 측면에서 매우 비효율적인 표현입니다. 이러한 상황에서 일반적인 방법은 0이 아닌 값만 저장되는 희소 표현을 사용하는 것입니다. 희소 표현에서는 위에서 설명한 것처럼 여전히 각 특성값에 대해 독립적인 모델 가중치가 학습됩니다.