티스토리 뷰

사이킷런의 데이터 스케일링 사용 시 주의할 점

 

train_test_split 도구로 train set과 test set로 분리 후, test set에 대해서 스케일링 할 때에는 Scaler 처리 없이 transform()만 해주면 된다. 즉, train set에 대해서 fit()한 Scaler 객체를 이용해서 test set을 변환해주면 된다는 것이다.


왜? 학습데이터로 fit()이 적용된 스케일링 기준 정보를 그대로 test data에 적용해야하며 그렇지 않고 test data로 다시 새로운 스케일링 기준 정보를 만들게 되면 train data와 test data의 스케일링 기준 정보가 서로 달라지기 때문에 올바른 예측 결과를 도출하지 못할 수 있다.

예를 들자면,

train data가 0부터 10까지의 데이터이고, test data가 0부터 5까지의 데이터일 때

 

만약 각각, fit과 transform() 메서드를 적용하여 변환시킨다면

train data에는 최솟값 0, 최댓값 10이 설정되어 1/10 scale이 적용되기 때문에 1은 0.1로 2는 0.2, 그리고 5는0.5, 10은 1로 변환되며,


test data에는 최솟값 0, 최댓값 5가 설정되어 1은 0.2로, 2는 0.4로 그리고 5는 1로 변환된다.


train data에서는 2가 0.2로 변환되었고, 10이 1로 변환되었기 때문에 이렇게 되면 train data와 test data의 서로 다른 원본값이 동일한 값으로 변환되는 결과를 초래한다. 그렇기 때문에 test data에 다시 fit()을 적용해서는 안되며, train data로 이미 fit()이 적용된 Scaler 객체를 이용해 transform()으로  변환해야 한다.

 

from tensorflow.python.keras.models import Sequential
from tensorflow.python.keras.layers import Dense
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler, StandardScaler
from sklearn.preprocessing import MaxAbsScaler, RobustScaler
import numpy as np
import time


datasets = load_boston()
x = datasets.data
y = datasets.target

# print(np.min(x)) #0.0
# print(np.max(x)) #711.0
# x = (x-np.min(x)) /(np.max(x)-np.min(x))
# print(x[:10])

x_train, x_test, y_train, y_test = train_test_split(x,y, train_size = 0.7, random_state = 66)

###############Scaler 방법###############################
#방법 1)scaler = StandardScaler()
#방법 2)scaler = MinMaxScaler()
#방법 3)scaler = MaxAbsScaler()
#방법 4)scaler = RobustScaler()

scaler.fit(x_train)
x_train = scaler.transform(x_train) 
x_test = scaler.transform(x_test)
print(np.min(x_train)) #0.0 
print(np.max(x_train)) #1.0

데이터 스케일링 (Data Scaling) 이란?

데이터 스케일링 설명, 실습, 그래프로 데이터 분포 확인하기

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함