데이터 일반화 vs 표준화 (Normalization and Standardization of Data)
머신러닝 용어 중 가장 헷갈리고, 면접 질문 등에도 단골로 등장하는 것들이 바로 Normalization, Standardization 그리고 Regularization이라고 생각한다. 실제로 필자도 모 AI 기업 면접에서 긴장한 나머지 이것들을 헷갈린 적이 있다.
~zation이라는 유사성과 같은 단어라도 표준화, 일반화, 정규화 등 여러가지로 번역된 점이 이 단어들을 헷갈리게 만든다고 생각한다.
오늘은 이 중에서도 데이터와 관련된 일반화Normalization와 표준화Standardization를 다뤄보고자 한다. (Regularization도 매우 중요하니 다음에 다뤄보겠다!)
제목은 한글로 쓰는 내 나름의 블로그 방침 상 번역된 이름을 썼지만, 아래부터는 혼동을 방지하기 위해 영어를 주로 쓰겠다.
데이터 전처리
데이터의 Normalization과 Standardization 모두 머신러닝의 데이터 전처리 과정과 관련된 용어이다. 먼저 이러한 데이터의 전처리가 왜 필요한지 생각해보자.
이 분야에서 가장 흔히 예로 드는 게 boston_housing이라는 데이터셋이다. 이 데이터셋에는 보스턴의 집들과 그 가격이 포함되어 있는데, 주로 방의 개수, 화장실 개수, 평수 등의 정보로 집의 가격을 맞추는 실습에 활용된다.
위 데이터셋을 예로 들기는 했지만, 우리는 쉬운 이해를 위해 seoul_housing이라는 가상의 데이터셋을 다뤄보자.
이 데이터셋은 아래와 같은 정보로 구성되어있다. 필자가 부동산에는 문외한이라 순전히 상상으로만 만든 자료임을 감안해주기 바란다.
1km 이내 초등학교 | 인근 지역 1개월 당 경범죄 발생 건수의 평균 | 인근 지하철 역까지의 거리 (m) | 집 가격 (만원) | |
최소값 (min) | 0 | 8 | 30 | 10,000 |
평균값 (avg) | 1.5 | 23.1 | 80 | 100,000 |
최댓값 (max) | 5 | 90 | 300 | 500,000 |
데이터 Normalization
위 데이터에서 집 가격을 보자. 적게는 1억원에서 비싸게는 50억 원의 집이 있다. 우리가 만들고자 하는 머신러닝 모델이 선형 회귀 모델이라고 생각해보자. $WX + b$ 형태의 식이 생길 텐데, W와 b 같은 파라미터가 다른 열(1km 이내 초등학교의 개수 등)로부터 10000~500000의 큰 값을 만들어내려면 매우 큰 값이 필요할 것이고, 이는 학습률(Learning Rate)을 불필요하게 크게 만드는 요인이 될 것이다.
이런 문제는 예측해야할 데이터뿐 아니라 입력 데이터에서도 발생한다. 1km 이내 초등학교 데이터는 작으면 0, 커봤자 5이다. 그러나 인근 지하철 역까지의 거리 데이터는 30 ~ 300까지 너무나도 큰 데이터를 갖는다. 이런 경우, 학습을 진행했을 때, 실제로는 인근 지하철 역의 거리보다도 학군이 중요함에도, 큰 값을 갖는 지하철 역 데이터에 가중치가 편향되는 문제가 생길 수 있다. 머신러닝 모델이 선입견을 갖게 되는 것이다.
이런 문제를 해결하기위해 Normalization이 도입되었다. 이는 이름 그대로 값을 "일반화"하는데, 데이터 값들을 0~1 사이의 값으로 축소시킨다. 식은 아래와 같다.
$$ x = \frac{x-x_{min}}{x_{max}-x_{min}} $$
이를 적용하면, 열의 최소값은 0, 최댓값은 1이 되고, 나머지 값들은 그 사이로 정규화된다. 이때, 원래 데이터의 분포는 손실되지 않는다.
데이터 Standardization
이번에는 인근 지역 범죄율을 보자. 8~90의 값을 갖고, 평균은 약 23이다. 뭔가 이상하다. 평균에 비해 최댓값이 너무 멀리 있다.
가끔 데이터 입력자의 실수나, 특정 요인 (위의 경우, 특별히 치안이 안 좋은 행정구가 있다던지)에 의해 이런 이레귤러가 발생한다. 다른 데이터는 다들 8~40 정도로 23 근처에서 노는데, 특정 데이터 하나가 90에 가있는 경우이다.
이런 경우를 outlier라고 한다. 이런 outlier를 제거해 주는 것은, 머신러닝 모델이 일반적인 경우에 집중하여 대부분의 경우에서 올바른 결과를 내는데 도움이 된다.
outlier도 올바르게 진단해야 좋은 모델이 아니냐고 생각할 수도 있지만, 그렇지 않다. outlier는 일반적이지 않기에 outlier다. outlier에 대해 올바른 결과를 내는 모델은 상황에 따라, 평균 근처의 값들(대부분의 값들)에 대한 결과를 올바르지 못하게 낼 수도 있다.
Standardization을 위해서 먼저 z-score라는 지표를 계산한다.
$$ z(x) = \frac{x-m}{\sigma } $$
$m$은 평균, $\sigma $은 표준 편차이다. 이렇게 계산된 z-score는 평균에서 크게 벗어난 outlier일수록 큰 절댓값을 갖는다. 이제 이 score가 -2 ~ 2를 벗어난 값들을 모두 지워주면 된다.
이를 통해 머신러닝 모델의 학습을 방해하는 outlier들을 제외할 수 있다. 값들이 -2~2 사이에 0을 중앙값으로 갖는 값으로 모이는 것은 덤이다.
Normalization과 Standardization의 활용
복습해보자!
Normalization은 값을 0과 1 사이로 모아서 값의 규모(scale)를 줄여준다. min과 max의 편차가 크거나, 다른 열에 비해 데이터가 지나치게 큰 열에 사용한다.
더 작은 scale을 갖는 데이터는 더욱 빠르게 수렴하는 경향이 있어, 머신러닝 학습 성능 향상에 도움을 준다. 특히 MSE와 같이 Cost가 Loss에 비례해 끝없이 커지는 비용 함수에 대해서는, 비용 값이 너무 커서 발생할 수 있는 문제들을 예방할 수 있다. 또한, 여러 입력 데이터의 scale을 비슷하게 맞춰줌으로써 각 데이터가 비슷한 중요도를 갖도록 학습시킬 수 있다.
Standardization은 z-score의 절댓값이 2를 넘는 값들을 지워 평균에서 크게 벗어난 outlier를 제거한다. 이는 모델이 대부분의 상황에서 더 높은 precision을 갖게 한다.
때에 따라선 Standardization 이후에 Normalization을 추가로 하기도 한다.
오늘은 Standardization과 Normalization을 알아봤다. 오픈 채팅방에서 누군가 둘의 차이점을 물어봐서 알아보다 글까지 적게 되었는데, 독자분들께도 도움이 되었길 바란다. 글에 대한 지적과 공유는 언제나 환영한다.
'강의 > 딥러닝 기초' 카테고리의 다른 글
배치와 미니 배치, 확률적 경사하강법 (Batch, Mini-Batch and SGD) (0) | 2020.05.28 |
---|---|
Convexity와 딥러닝 (Convex Function과 Convex Set) (1) | 2020.04.13 |
경사하강법과 손실 함수: 심층 신경망 학습시키기 (Gradient Descent and Loss Function) (8) | 2020.01.23 |
퍼셉트론(Perceptron): 덧셈과 곱셈으로 뉴런 구현하기 (3) | 2020.01.06 |
왜 지금인가? - 딥러닝의 역사 (0) | 2020.01.06 |
댓글
이 글 공유하기
다른 글
-
배치와 미니 배치, 확률적 경사하강법 (Batch, Mini-Batch and SGD)
배치와 미니 배치, 확률적 경사하강법 (Batch, Mini-Batch and SGD)
2020.05.28 -
Convexity와 딥러닝 (Convex Function과 Convex Set)
Convexity와 딥러닝 (Convex Function과 Convex Set)
2020.04.13 -
경사하강법과 손실 함수: 심층 신경망 학습시키기 (Gradient Descent and Loss Function)
경사하강법과 손실 함수: 심층 신경망 학습시키기 (Gradient Descent and Loss Function)
2020.01.23 -
퍼셉트론(Perceptron): 덧셈과 곱셈으로 뉴런 구현하기
퍼셉트론(Perceptron): 덧셈과 곱셈으로 뉴런 구현하기
2020.01.06