[구글 머신러닝 단기집중과정] 7강

환공지능·2021년 7월 2일
0
post-thumbnail

1. 표현(Representation) : 특성(feature) 추출

(1) 원시 데이터를 특성에 매핑

그림 1의 왼쪽 부분은 입력 데이터 소스의 원시 데이터이고 오른쪽 부분은 특성 벡터, 즉 데이터 세트의 예로 구성된 부동 소수점 값의 집합이다. 특성 추출이란 원시 데이터를 특성 벡터로 변환하는 과정 이다. 특성 추출에는 일반적으로 상당한 시간이 소요된다.

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

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

(2) 숫자 값 매핑

정수와 부동 소수점 데이터에는 숫자 가중치를 곱할 수 있으므로 특수한 인코딩은 필요하지 않다. 그림 2에서 제시하는 것처럼 원시 정수 값 6을 특성 값 6.0으로 변환하는 것은 큰 의미가 없다.


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

(3) 범주 값 매핑

범주형 특성은 가능한 값의 이산 집합을 찾는다. 원-핫 인코딩을 통해 문자열 값('Shorebird Way')을 희소 벡터로 매핑합니다. 모델은 학습된 가중치로 문자열을 곱할 수 없으므로 특성 추출을 통해 문자열을 숫자값으로 변환한다.

이는 가능한 값의 어휘로 지칭할 특성 값에서 정수로의 매핑을 정의함으로써 가능하다.

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

이러한 방식을 통해 모든 특성 값(예: 거리 이름)에 대한 부울 변수를 효과적으로 만들 수 있다.

2. 표현(Representation) : 좋은 특성(feature)의 조건

(1) 거의 사용되지 않는 불연속 특성 값 배제

좋은 특성 값은 데이터셋에서 5회 이상 나타나야 한다. 이러한 특성 값은 모델에서 라벨과의 관계를 학습하기가 쉬워지며, 동일한 이산 값을 갖는 예가 많다면 모델에서 다양한 설정으로 특성을 확인하여 라벨을 예측하는 좋은 지표인지 판단할 수 있다.

(2) 가급적 분명하고 명확한 의미 부여

각 특성은 명확하고 분명한 의미를 가져야 한다. 데이터의 노이즈, 엔지니어의 실수 등으로 값이 불명확해지는 것을 방지하여야 한다.

(3) '특수' 값을 실제 데이터와 혼용하지 말 것

좋은 부동 소수점 특성은 특이한 범위 외 불연속성 또는 '특수'값을 포함하지 않는다. -1과 같은 특수값으로 데이터가 없음을 표현하지 않아야 한다.

(4) 업스트림 불안정성 고려

특성의 정의는 시간이 지나도 변하지 않아야 한다.

3. 표현 : 데이터 정제

(1) 특성 값 조정

조정(Regularization) 이란 부동 소수점 특성 값을 100~900 등의 자연 범위에서 0~1 또는 -1~+1 등의 표준 범위로 변환하는 작업이다. 특성 세트가 단일 특성으로만 구성된 경우 조정에 따르는 실질적인 이점은 거의 없으나 특성 세트가 여러 특성으로 구성되었다면 특성 조정으로 다음과 같은 이점을 누릴 수 있다.

1) 경사하강법이 더 빠르게 수렴.
2) 'NaN 트랩'이 방지. NaN 트랩이란 모델의 숫자 중 하나가 NaN(예: 학습 중에 값이 부동 소수점 정밀도 한도를 초과하는 경우)이 된 후 수학 연산 과정에서 모델의 다른 모든 숫자가 결국 NaN이 되는 상황임.
3) 모델이 각 특성의 적절한 가중치를 익히는 데 도움이 됨. 특성 조정을 수행하지 않으면 모델에서 범위가 더 넓은 특성을 과도하게 중시.

모든 부동 소수점 특성에 동일한 척도를 부여할 필요는 없다. 특성 A는 -1~+1로, 특성 B는 -3~+3으로 조정해도 심각한 부작용은 없다. 그러나 특성 B를 5000~100000으로 조정하면 모델이 부정적으로 반응할 것이다.

(2) 극단적 이상점 처리

다음은 캘리포니아 주택 데이터 세트에서 얻은 roomsPerPerson이라는 특성을 나타낸 플롯이다. roomsPerPerson 값은 지역의 전체 방 수를 해당 지역의 인구로 나누어 계산한다. 플롯을 보면 캘리포니아의 대부분 지역은 1인당 1~2개의 방을 갖추고 있다. 그러나 x축을 한번 살펴보자.


그림 4. 매우 긴 꼬리

이러한 극단적 이상점이 주는 영향을 최소화하려면 어떻게 해야 할까? 모든 값의 로그를 취하는 방법이 있다.


그림 5. 로그 조정을 거쳐도 꼬리가 남아 있음

로그 조정을 거치면 상황이 다소 개선되지만, 이상점 값의 꼬리가 아직도 상당히 남아 있다. 다른 접근법을 시도해 보겠다. roomsPerPerson의 최대값을 4.0 같은 임의의 지점에서 잘라내어 제한을 두면 어떻게 될까요?


그림 6. 4.0에서 특성 값 잘라내기

특성 값을 4.0에서 잘라낸다는 말은 4.0보다 큰 값을 모두 무시한다는 의미가 아니라, 4.0보다 큰 값을 모두 4.0으로 인식하겠다는 의미이다. 따라서 4.0 지점에 부자연스러운 경사가 생기지만 조정된 특성 세트는 원래 데이터보다 훨씬 유용해진 상태이다.

(3) 비닝(Binning)

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


그림 7. 위도별 주택 수

데이터 세트에서 latitude는 부동 소수점 값이다. 그러나 이 모델에서 latitude를 부동 소수점 특성으로 표현할 수는 없는데, 이는 위도와 주택 값 사이에 선형적 관계가 없기 때문이다. 예를 들어 위도 35도에 위치한 주택이 위도 34도에 위치한 주택보다 35/34만큼 싸거나 비싸지는 않다. 그러나 각각의 위도 값은 주택 가격을 예측하는 좋은 지표일 가능성이 높다.

위도를 유용한 예측 지표로 사용하기 위해 다음 그림과 같이 위도를 여러 '빈(bin)'으로 나누어 보겠다.


그림 8. 값 비닝

이제 부동 소수점 특성 하나가 아니라 11개의 개별 부울 특성(LatitudeBin1, LatitudeBin2, ..., LatitudeBin11)이 생겼습니다. 11개의 개별 특성은 다소 번잡하므로 하나의 11원소 벡터로 통일하면 위도 37.4도를 다음과 같이 표현할 수 있다.

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

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

(4) 스크러빙(Scrubbing)

지금까지는 학습 및 테스트에 사용되는 모든 데이터를 신뢰할 수 있다고 가정했다. 그러나 실무에서는 다음과 같은 이유로 데이터 세트의 여러 예를 신뢰할 수 없다.

  • 값 누락.
  • 중복 예.
  • 잘못된 라벨.
  • 잘못된 특성 값.

잘못된 예가 발견되면 일반적으로 데이터 세트에서 삭제하여 해당 예를 '수정'한다. 값 누락이나 중복 예를 탐지하고자 간단한 프로그램을 작성할 수 있다. 잘못된 특성 값 또는 라벨을 탐지하기는 훨씬 더 까다로울 수 있다.

잘못된 개별 예를 탐지하는 것 외에 집계에서도 잘못된 데이터를 탐지해야 한다. 히스토그램은 집계 데이터를 시각화하는 유용한 메커니즘이다. 또한 다음과 같은 통계를 구하면 도움이 될 수 있다.

  • 최대 및 최소
  • 평균 및 중앙값
  • 표준편차

(5) 철저한 데이터 파악

다음과 같은 규칙을 따라야 한다.

  • 정상적인 데이터가 어떠한 모습이어야 하는지 항상 생각할 것.
  • 데이터가 이러한 예상과 일치하는지 확인하고, 그렇지 않다면 그 이유를 파악할 것.
  • 학습 데이터가 대시보드 등의 다른 소스와 일치하는지 재차 확인할 것.

핵심적인 코드를 다룰 때와 마찬가지로 데이터에 온 정성을 쏟아야 한다. 좋은 데이터가 좋은 ML을 만든다. 이를 항상 유념해야 할 것이다.

.
.
.
강의 링크 : 구글 머신러닝 단기집중과정

profile
데이터사이언티스트 대학원생

0개의 댓글