2 minute read

Scaling vs Normalization

스케일링과 정규화를 혼동하기 쉬운 이유 중 하나는 용어가 때때로 같은 의미로 사용되어 혼동되기 때문이다. 두 경우 모두 변환 된 데이터 포인트가 유용한 특정 속성을 갖도록 숫자 변수의 값을 변환한다. 차이점은 다음과 같다.

  • Scaling은 데이터 범위를 변경한다.
  • 정규화는 데이터 분포의 모양을 변경한다.

Scaling MinMax

Scaling은 0-100 또는 0-1과 같은 특정 척도에 맞도록 데이터를 변환합니다. SVM (Support Vector Machine) 또는 KNN (k-nearest neighbors)과 같이 데이터 포인트가 얼마나 멀리 떨어져 있는지를 기반으로하는 방법을 사용하는 경우 데이터를 확장하려고합니다. 이러한 방법을 사용하면 숫자 특성의 “1” 변경이 동일한 중요성을 갖습니다.

예를 들어 일부 제품의 가격을 원과 미국 달러로 볼 수 있습니다. 1달러는 약 1100원의 가치가 있지만 가격을 조정하지 않으면 SVM 또는 KNN과 같은 방법은 1원의 가격 차이를 1달러의 차이만큼 중요하게 간주합니다. 이것은 우리가 알고있는 직관과 맞지 않습니다. 통화를 사용하면 통화간에 변환을 할 수 있습니다. 하지만 키와 몸무게 같은 것은 어떠까요? 몇 kg이 1m와 같아야 하는지 명확하지 않습니다. 변수를 Scaling하면 동일한 기반에서 서로 다른 변수를 비교할 수 있습니다.

import pandas as pd
import numpy as np

from sklearn.preprocessing import MinMaxScaler,power_transform

# plotting modules
import seaborn as sns
import matplotlib.pyplot as plt

# set seed for reproducibility
np.random.seed(0)
# generate 1000 data points randomly drawn from an exponential distribution
original_data = np.random.exponential(size=1000)

# mix-max scale the data between 0 and 1
mm_scaler = MinMaxScaler()
mm_scaled_data = mm_scaler.fit_transform(original_data.reshape(-1,1))

# plot both together to compare
fig, ax = plt.subplots(1,3,figsize=(10,4))
sns.distplot(original_data, ax=ax[0])
ax[0].set_title("Original Data")
sns.distplot(mm_scaled_data, ax=ax[1])
ax[1].set_title("MinMax Scaled data")

MinMaxScaling에서 데이터의 모양은 변경되지 않지만 범위가 0에서 1사이로 바뀐것을 볼 수 있다. 이 스케일링은 표준편차가 매우 작거나 가우스 분포가 없는 경우에 매우 잘 작동한다. 그러나 이상치(outlier)에 너무 많은 영향을 받는다는단점이 있다. MinMaxScaler는 다음과 같은 공식을 따르기 때문에 직접 구현도 가능하다. 각 값에서 최소값을 뺀 다음 열의 최대값에서 최소값을 뺀 값으로 나눈다.

min = original_data.min()
max = original_data.max()
mm_scaled_data = (original_data - min) / (max - min)
mm_scaled_data.reshape(-1,1)

Normalization

정규화는 관측치를 정규 분포로 설명 할수 있도록 변경하는 것입니다.

정규분포 : “종 곡선”이라고도 하는 이것은 대략 동일한 관측치가 평균 위와 아래에 있고 평균과 중앙값이 동일하며 평균에 더 가까운 관측치가 있는 특정 통계 분포입니다. 정규분포는 평균과 표준편차에 따라 모양이 결정되고, 평균이 0이고 표준편차가 1인 정규분포를 표준 정규 분포라고 한다. 정규분포는 가우스 분포라고도 한다.

일반적으로 데이터가 정규 분포를 따른다고 가정하는 기계 학습 또는 통계 기술을 사용하려는 경우 데이터를 정규화한다. 이러한 예로는 선형판별분석(LDA) 및 Gaussian naive Bayes가 있습니다. (Tip : 이름에 “Gaussian”이 포함된 모든 방법은 아마도 정규성을 가정합니다.)

normalized_data = power_transform(original_data.reshape(-1,1))
normalized_data

# plot both together to compare
fig, ax=plt.subplots(1,2,figsize=(10,4))
sns.distplot(original_data, ax=ax[0])
ax[0].set_title("Original Data")
sns.distplot(normalized_data,ax=ax[1])
ax[1].set_title("normalized Data")

데이터의 모양이 변경되었습니다. 정규화하기 전에는 거의 L 자 모양이었습니다. 그러나 정규화 후에는 종의 윤곽선처럼 보입니다.

Comments