기존의 프로그래밍에서는 코드에 중점을 두었습니다. 머신러닝 프로젝트에서는 표현에 중점을 둡니다. 즉, 개발자는 특성을 추가하고 개선하여 모델을 다듬어 나갑니다.
원시 데이터를 특성에 매핑
그림 1의 왼쪽 부분은 입력 데이터 소스의 원시 데이터이고 오른쪽 부분은 특성 벡터, 즉 데이터 세트의 예로 구성된 부동 소수점 값의 집합입니다. 특성 추출이란 원시 데이터를 특성 벡터로 변환하는 과정입니다. 특성 추출에는 일반적으로 상당한 시간이 소요됩니다.
여러 머신러닝 모델은 특성 값에 모델 가중치를 곱해야 하므로 실수 벡터로 가중치를 표현해야 합니다.
특성 추출이라는 과정을 통해 원시 데이터가 특성 벡터에 매핑됩니다.
숫자 값 매핑
정수와 부동 소수점 데이터에는 숫자 가중치를 곱할 수 있으므로 특수한 인코딩은 필요하지 않습니다. 그림 2에서 제시하는 것처럼 원시 정수 값 6을 특성 값 6.0으로 변환하는 것은 큰 의미가 없습니다.
원시 데이터에서 직접 복사할 수 있는 특성의 예
범주 값 매핑
범주형 특성은 가능한 값의 이산 집합을 갖습니다. 예를 들면 다음과 같은 옵션을 포함하는 street_name이라는 특성이 있을 수 있습니다.
{'Charleston Road', 'North Shoreline Boulevard', 'Shorebird Way', 'Rengstorff Avenue'}
모델은 학습된 가중치로 문자열을 곱할 수 없으므로 특성 추출을 통해 문자열을 숫자값으로 변환합니다.
이는 가능한 값의 어휘로 지칭할 특성 값에서 정수로의 매핑을 정의함으로써 가능합니다. 전 세계의 모든 거리가 데이터세트에 나타나는 것은 아니므로 다른 모든 거리를 포괄적인 '기타' 범주(OOV(out-of-vocabulary) 버킷이라고도 함)로 그룹화할 수 있습니다.
이 방법을 사용하면 다음과 같이 거리 이름을 숫자로 매핑할 수 있습니다.
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입니다.
원-핫 인코딩을 통해 문자열 값('Shorebird Way')을 희소 벡터로 매핑합니다.
이러한 방식을 통해 모든 특성 값(예: 거리 이름)에 대한 부울 변수를 효과적으로 만들 수 있습니다. 여기에서는 집이 Shorebird Way에 있는 경우 Shorebird Way에만 해당하는 바이너리 값은 1입니다. 따라서 모델은 Shorebird Way의 가중치만 사용합니다.
이와 유사하게 집이 두 거리가 만나는 모퉁이에 위치한 경우 두 바이너리 값은 1로 설정되며 모델은 각각의 가중치를 모두 사용합니다.
원-핫 인코딩은 우편번호와 같이 가중치를 바로 곱하고 싶지 않은 숫자 데이터까지 확장됩니다.
희소 표현
데이터세트에 street_name의 값으로 포함하고 싶은 거리 이름이 백만 개가 있다고 가정해 보겠습니다. 1개 또는 2개 요소만 true인 요소 백만 개의 바이너리 벡터를 명시적으로 만드는 것은 이러한 벡터를 처리할 때의 용량 및 계산 시간을 고려했을 때 매우 비효율적인 표현입니다. 이러한 상황에서 일반적인 방식은 0이 아닌 값만 저장되는 희소 표현을 사용하는 것입니다. 희소 표현에서는 위에서 설명한 것처럼 여전히 각 특성 값에 독립적인 모델 가중치가 학습됩니다.
주요 용어
'DATA Science > Google Machine Learning' 카테고리의 다른 글
표현: 데이터 정제 (0) | 2021.07.25 |
---|---|
표현: 좋은 특성의 조건 (0) | 2021.07.25 |
추가 분할(검증데이터 추가?) (0) | 2021.07.25 |
데이터 분할 (0) | 2021.07.25 |
일반화 : 과적합의 위험 (0) | 2021.07.25 |
댓글