-
Feature Scaling | Supervised Machine Learning: Regression and ClassificationMachine Learning/Stanford ML Specialization 2023. 10. 30. 22:54
Feature and Parameter
집값을 구하기 위해, 두가지의 feature를 사용했다고 가정해보자. 집을 결정하는 요인으로 집의 크기(x1)와 방의 갯수(x2)가 있고, 크기는 300 - 2000 사이, 방의 갯수는 0 - 5 사이라고 가정해보자. 그러면 아래와 같은 모델에서, w1, w2, b값을 알아내는것이 목표이다.
price = w1x1 + w2x2 + b
우리가 단 한가지의 training example이 있어서 그것을 갖고 w1, w2, b값을 찾아냈다고 가정해보자. 예시는 다음과 같다.
집 크기(x1) = 2000 방 갯수(x2) = 5 b = $500K
아래와 같은 parameters로 예측을 했다고 해보자.
w1 = 50 w2 = 0.1 b = 50
이 parameters를 이용해서 예시를 적용해보면, 아래와 같은 결과가 나온다.
price = 50 * 2000 + 0.1 * 5 + 50 # $100,050.5K
실제 가격인 $500K와 많이 다른 결과를 보여주고 있다. 이번엔 아래와 같은 parameters로 예측 모델을 테스팅해본다고 가정해보자.
w1 = 0.1 w2 = 50 b = 50
이 parameters를 이용해서 예시를 적용해보면, 아래와 같은 결과가 나온다.
price = 0.1 * 2000 + 50 * 5 + 50 # $500K
실제 주택 가격과 동일한것을 볼 수 있다.
여기에서 보였듯이, 만약 feature의 값이 집의 크기 예시(x1)처럼 큰 숫자라면, 그에 해당하는 parameter (예: w1) 값은 작을 확률이 높고, 만약 feature의 값이 방의 갯수(x2) 예시처럼 크지 않다면, 그에 해당하는 parameter(예: w2)값은 클 확률이 높다.
방의 갯수와 집의 크기를 보여주는 차트에서 확인할 수 있듯, x2에 비해 x1은 많은 선택지가 있고, 값도 wide한것을 확인할 수 있다. 하지만 Parameter를 보면 이야기는 달라진다. w1의 예측값들을 보면, 0과 1 사이의 값들로 구성되어있는데, 이는 집의 크기가 아주 크기때문에, 조그마한 parameter(w1)의 변화에도 최종 집값에 큰 영향을 끼쳐버리기 때문에, 다른 feature들과 같이 유의미한 값을 주려면 parameter가 작아야 한다. 반대로 방의 갯수의 경우, 값이 아주 작아서 parameter까지 작아지면, 최종 집값에 미치는 영향이 너무 작아져 버리기 때문에, w1에 비해 상대적으로 큰 10에서 100사이의 값들로 예측을 하는것을 볼 수 있다.
그런데 이런 점들을 보완하기 위한 방법이 있다. 바로 re-scaling을 하는것이다.
https://youtu.be/YVtP5UGdgXg Features들의 크기가 너무 차이가 나서 Parameter를 구할 때 일정하지 않기 때문에, 300 - 2000, 또는 0 - 5의 숫자를 이용하는게 아닌, 0 - 1 사이의 숫자로 모든 Features을 Re-scale하게 되면, Gradient Discent은 Minimum에 도달하는 더 직접적인 경로를 찾아낼 수 있다. 즉, Gradient Discent의 시간을 훨씬 더 절약해서 효율적인 모델 트레이닝을 할 수 있게 된다.
Feature Scaling
Divide by Maximum (최대값으로 나누기)
그렇다면 어떻게 Scaling 할 수 있을까? 가장 간단한 방법을 Maximum 값으로 Feature 값들을 나눠주는 것 이다. 예를 들어, 집의 사이즈는 300 - 2000 사이였으므로, 모든 값들을 2000으로 나눠주면 0.15에서 1 사이의 값을 얻게 된다. 마찬가지로, 방의 갯수는 0 에서 5 사이었기 떄문에 5로 나눠주게 되면, 0에서 1 사이의 소숫점이 된다. 최댓값으로 나누는 방법으로도 이처럼 쉽게 Scaling을 할 수 있다.
Mean normalization (평균 정규화)
이외에도 Mean normalization의 방법이 있다. 바로 0이 중심이 되도록 조정을 하고, +1 에서 -1 사이에 값들이 존재하게 하는 등으로 값을 조정하는 방법이다. 집의 크기를 예를 들어보자. 집의 크기의 최소/최대는 우리가 기존에 사용했던 300 - 2000의 값이라고 하고, 해당 사이즈들의 mean값이 600이라고 하자.
mean = 600 max = 2000 min = 300
이 경우, x1 값은 아래와 같이 구할 수 있다.
x1 = (x1 - mean) / (max - min) = (x1 - 600) / 2000 - 300
이러한 계산을 이용해서 x1의 값은 -0.18에서 0.82 사이에 위치하도록 조정할 수 있다. 방의 크기도 마찬가지다. 결과적으로 아래와 같이 Features 들을 Mean Normalization을 이용해서 노멀화(?) 시킬 수 있다.
https://youtu.be/gmJqLGrUscg Z-score normalization (Z-점수 정규화)
또한 Z-점수 정규화라는 방법도 존재한다. 이 방법으로 Normalization을 하려면, Standard Deviation, 즉 표준편차를 계산해야 한다. 이 표준편차는 보통 시그마(σ)를 이용해서 표현한다. 위에서 계산했던 Mean Normalization과 거의 비슷한데, max - min의 수식으로 최대/최소의 차이로 나누는 대신, 표준편차로 나누어서 소숫점을 구한다는 점이 다르다.
https://youtu.be/gmJqLGrUscg Aim
Feature Scaling을 할 때는 -1 에서 1 사이로 조정을 하는게 좋다. 하지만 -3 에서 3, 또는 -0.3 에서 0.3 사이라고 해도, acceptable한 range라고 할 수 있다. 또는 아래와 같은 케이스도, 허용 가능하며, re-scaling이 필요하지 않다.
0 <= x1 <= 3 -2 <= x2 <= 0.5
비록 x1, x2 모두 -1에서 1 사이에 완전하게 들어오지는 않았지만, 허용 가능한 범위에 있다고 할 수 있다. 하지만, 아래와 같은 케이스들은 rescale을 해주어야 한다.
-100 <= x3 <= 100
음수도 양수도 너무 크다. rescaling을 통해서 줄이는것이 좋다.
-0.001 <= x4 <= 0.001
숫자가 너무 작아서 차이를 확인하기가 힘들다. 이 역시 다시 스케일링을 해줄 필요가 있다.
98.6 <= x5 <= 105
환자의 체온을 Ferenhite으로 측정한 데이터이다. 이것도 역시 re-scaling이 필요할까? 정답은 Yes 이다. 숫자가 역시 너무 크다. 100정도의 숫자로 나눠주거나, 위에서 언급한 방법들을 이용해서 Normalization을 해줄 필요가 있다. 만약 re-scaling이 필요한지 확신이 들지 않다면, 했을 때 단점은 없으므로(만약 하지 않았을 경우, 숫자가 너무 크거나 작으면 악영향이 있기때문에), 그냥 하면 된다. 이를 통해 Gradient Discent이 더 빠르게 진행될 수 있도록 도울 수 있다.
Reference
'Machine Learning > Stanford ML Specialization' 카테고리의 다른 글