표현: 데이터 정리

사과나무는 좋은 과일과 벌레 엉덩이를 함께 만듭니다. 그러나 고급 식료품점의 사과에서는 100% 완벽한 과일을 맛볼 수 있습니다. 과수원이나 식료품점 사이에 누군가가 나쁜 사과를 치우거나 회수할 수 있는 사과에 약간의 밀랍을 뿌리는 데 상당한 시간을 보냅니다. ML 엔지니어는 잘못된 예를 던지고 회수 가능한 사례를 정리하는 데 엄청난 시간을 할애합니다. '나쁜 사과' 몇 개가 큰 데이터 세트를 망칠 수 있습니다.

특성 값 조정

조정이란 부동 소수점 특성 값을 자연 범위 (예: 100~900)에서 표준 범위 (예: 0~1 또는 -1~+1)로 변환하는 것을 의미합니다. 특성 세트가 단일 특성으로만 구성되어 있는 경우 조정에 실질적인 이점이 거의 없거나 전혀 없습니다. 그러나 특성 세트가 여러 특성으로 구성된 경우 특성 조정이 다음과 같은 이점을 제공합니다.

  • 경사하강법이 더 빠르게 수렴됩니다.
  • 'NaN 트랩'이 방지됩니다. NaN 트랩이란 모델의 숫자 중 하나가 NaN이 되고 (예: 학습 중에 값이 부동 소수점 정밀도 한도를 초과하는 경우) 수학 연산 과정에서 모델의 다른 모든 숫자가 결국 NaN이 되는 상황입니다.
  • 모델이 각 특성의 적절한 가중치를 학습하는 데 도움이 됩니다. 특성을 조정하지 않으면 모델은 범위가 더 넓은 특성에 너무 많은 주의를 기울이게 됩니다.

모든 부동 소수점 특성에 정확히 동일한 배율을 부여할 필요는 없습니다. 특성 A는 -1에서 +1로, 특성 B는 -3에서 +3으로 조정해도 심각한 문제는 없습니다. 하지만 특성 B를 5,000에서 100,000으로 조정하면 모델은 제대로 반응하지 않습니다.

극한 이상점 처리

다음은 캘리포니아 주택 데이터 세트에서 얻은 roomsPerPerson라는 특성을 나타낸 도표입니다. roomsPerPerson 값은 한 지역의 총 객실 수를 해당 지역의 인구로 나누어 계산했습니다. 플롯을 보면 캘리포니아의 대다수에는 1인당 1~2개의 방이 있습니다. 그러나 x축을 잘 살펴보세요.

RoomPerPerson 도표

그림 4. 매우 긴 꼬리입니다.

이러한 극단적인 이상점의 영향을 최소화하려면 어떻게 해야 할까요? 한 가지 방법은 모든 값의 로그를 사용하는 것입니다.

로그(roomsPerPerson) 플롯에서 99% 의 값이 약 0.4~1.8 범위에 모여 있지만 여전히 4.2 정도까지 갈 수 있는 긴 꼬리가 남아 있습니다.

그림 5. 대수 조정은 여전히 꼬리를 남깁니다.

로그 조정을 하면 작업이 약간 더 나아지지만 이상점 값의 꼬리가 여전히 상당합니다. 또 다른 접근 방식을 선택해 보겠습니다. roomsPerPerson의 최댓값을 임의의 값(예: 4.0)으로 간단히 '제한'하거나 '자르면' 어떻게 될까요?

roomPerPerson 플롯에서 모든 값이 -0.3~4.0 범위에 놓입니다. 종 모양이지만 4.0 지점에 비정상적인 언덕이 있는 플롯

그림 6. 4.0에서 특성 값 자르기

특성 값을 4.0에서 잘라낸다고 해서 4.0보다 큰 모든 값이 무시되는 것은 아닙니다. 4.0보다 큰 모든 값이 이제 4.0이 된다는 의미입니다. 이것은 4.0 지점에 경사가 험준한 사실과 관련이 있습니다. 하지만 확장된 특성 세트는 원본 데이터보다 훨씬 유용합니다.

비닝

다음은 캘리포니아의 위도에 따른 주택의 상대적 분포를 보여주는 플롯입니다. 클러스터링을 확인하세요. 로스앤젤레스의 위도는 약 34도이고 샌프란시스코의 위도는 대략 38도입니다.

위도별 주택 수 도표 도표는 위도 36도 부근에 침체 구간이 있고 34도 및 38도 부근에 급상승 구간이 있는 매우 불규칙합니다.

그림 7. 위도별 주택 수

데이터 세트에서 latitude는 부동 소수점 값입니다. 그러나 이 모델에서 latitude를 부동 소수점 특성으로 표현하는 것은 적합하지 않습니다. 이는 위도와 주택 값 사이에 선형 관계가 없기 때문입니다. 예를 들어 위도 35도에 있는 주택이 위도 34도에 있는 주택보다 \(\frac{35}{34}\) 비싸거나 덜 비싸지 않습니다. 그러나 각 위도 값은 주택 값을 예측하는 좋은 지표일 것입니다.

위도를 유용한 예측 지표로 만들기 위해 다음 그림과 같이 위도를 '빈'으로 나누어 보겠습니다.

위도별 주택 수 도표 이 플롯은 다음과 같이 나뉩니다.

그림 8. 값 비닝.

이제 하나의 부동 소수점 특성 대신 11개의 고유한 불리언 특성 (LatitudeBin1, LatitudeBin2, ..., LatitudeBin11)이 있습니다. 11개의 개별 특성을 갖는 것은 다소 불충분하므로 단일 11원소 벡터로 통합해 보겠습니다. 이렇게 하면 위도 37.4도를 다음과 같이 나타낼 수 있습니다.

[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]

비닝을 사용하면 모델에서 각 위도에 대해 완전히 다른 가중치를 학습할 수 있습니다.

스크러빙

지금까지는 학습과 테스트에 사용되는 모든 데이터를 신뢰할 수 있다고 가정했습니다 실제로는 다음 중 하나 이상으로 인해 데이터 세트의 여러 예를 신뢰할 수 없습니다.

  • 값 생략. 예를 들어 사용자가 주택의 나이 값을 입력하지 않았을 수 있습니다.
  • 중복된 예. 예를 들어 서버에서 같은 로그를 실수로 두 번 업로드한 경우입니다.
  • 잘못된 라벨. 예를 들어 사용자가 참나무 사진에 단풍나무로 라벨을 잘못 지정했을 수 있습니다.
  • 잘못된 특성 값. 예를 들어 사용자가 숫자를 추가로 입력했거나 온도계를 햇빛에 두었을 수 있습니다.

잘못된 예를 감지하면 일반적으로 데이터 세트에서 삭제하여 '수정'합니다. 생략된 값 또는 중복 예를 감지하려면 간단한 프로그램을 작성하면 됩니다. 잘못된 특성 값 또는 라벨을 감지하는 것은 훨씬 까다로울 수 있습니다

잘못된 개별 예시를 감지하는 것 외에도 집계에서 잘못된 데이터도 감지해야 합니다. 히스토그램은 데이터를 집계로 시각화하는 훌륭한 메커니즘입니다. 또한 다음과 같은 통계를 가져오면 도움이 될 수 있습니다.

  • 최댓값 및 최솟값
  • 평균 및 중앙값
  • 표준 편차

불연속 특성에 대해 가장 일반적인 값의 목록을 생성해 보세요. 예를 들어 country:uk가 있는 예시의 수가 예상한 수와 일치하는지 확인합니다. language:jp를 데이터 세트에서 가장 자주 사용하는 언어로 사용해야 할까요?

철저한 데이터 파악

다음 규칙을 따르세요.

  • 데이터가 어떤 모습이어야 하는지를 염두에 두세요.
  • 데이터가 이러한 기대치를 충족하는지 또는 그렇지 않은 이유를 설명할 수 있는지 확인합니다.
  • 학습 데이터가 대시보드 등의 다른 소스와 일치하는지 다시 확인합니다.

중요한 코드를 다룰 때와 마찬가지로 데이터를 신중하게 취급합니다. 양질의 데이터를 필요로 하는 ML

추가 정보

머신러닝의 규칙, ML 2단계: 특성 추출