History
home
BDA 연혁
home

- 데이터 표준화, 정규화 스케일링(2)

스케일링 실습해보기

사이킷런에서 제공하는 sklearn.preprocessing 클래스를 활용하여 데이터 전처리를 진행해보자.
Q1. 만약 데이터셋에 아웃라이어가 존재한다면 아웃라이어에 민감하게 반응하여 적절한 스케일링이 이루어지지 않을 수 있다. 아웃라이어에 민감한 스케일링 방법과 그렇지 않은 방법에는 무엇이 있는지 찾아보자.

1. 최대-최소 스케일링

최대-최소 스케일링은 저번시간에서 다뤘듯이 피쳐벡터들을 피쳐마다 최솟값만큼 뺀 후, 피쳐마다의 최댓값과 최솟값의 차를 나누도록 전처리가 진행되었다.
사이킷런에서는 sklearn.preprocessing.MinMaxScaler 클래스를 통해 이를 제공한다. MinMaxScaler에서 제공하는 파라미터는 다음과 같다
class sklearn.preprocessing.MinMaxScaler(feature_range=(0, 1), *, copy=True, clip=False)
Python
복사
범위를 [0,1][0,1]이 아닌 feature_range를 통해 조정이 가능함을 알 수 있다. 작동과정은 다음과 같다.
X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0)) X_scaled = X_std * (max - min) + min
Python
복사
X_scaled를 업데이트할 때의 max,min를 통해 feature_range를 정할 수 있다.
사이키런에서 제공하는 예제 코드는 다음과 같다.
from sklearn.preprocessing import MinMaxScaler data = [[-1, 2], [-0.5, 6], [0, 10], [1, 18]] scaler = MinMaxScaler() print(scaler.fit(data)) print(scaler.data_max_) print(scaler.transform(data)) print(scaler.transform([[2, 2]]))
Python
복사
fit()메서드를 통해 위의 X_scaled를 계산하고 transform()을 통해 다음 들어오는 값을 전처리해준다.

2. 정규화 스케일링

정규화 스케일링은 피쳐벡터마다 평균과 표준편차를 구해, 평균을 뺀 다음 표준편차만큼 나눠 스케일링이 진행되었었다.
사이킷런에서는 sklearn.preprocessing.StandardScaler 클래스를 통해 이를 제공한다. StandardScaler에서 제공하는 파라미터는 다음과 같다 .
class sklearn.preprocessing.StandardScaler(*, copy=True, with_mean=True, with_std=True)
Python
복사
with_mean, with_std는 피쳐의 평균이 0이거나 분산이 1일 때는 전처리가 필요없으므로, false로 두어 불필요한 계산을 줄이도록 하는 파라미터이다.
사이킷런에서 제공하는 예시 코드는 다음과 같다.
from sklearn.preprocessing import StandardScaler data = [[0, 0], [0, 0], [1, 1], [1, 1]] scaler = StandardScaler() print(scaler.fit(data)) print(scaler.mean_) print(scaler.transform(data)) print(scaler.transform([[2, 2]]))
Python
복사
마찬가지로 fit()메서드와 transform()메서드를 활요하여 전처리를 진행한다.