min-max scaling
(최소-최대 스케일 변환)
샘플 에 대해 아래와 같이 scaling 하여 계산
# 의존성
pipenv install scikit-learn pandas
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler, StandardScaler, RobustScaler, MaxAbsScaler
import pandas as pd
def get_dataset():
## wine dataset
df_wine = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/wine/wine.data', header=None)
df_wine.columns = ['Class label', 'Alcohol', 'Malic acid', 'Ash',
'Alkalinity of ash', 'Magnesium', 'Total phenols', 'Flavanoids',
'Nonflavanoid phenols', 'Proanthocyanidins', 'Color intensity', 'Hue',
'OD280/OD315 of diluted wines', 'Proline']
## split dataset
x, y = df_wine.iloc[:, 1:].values, df_wine.iloc[:, 0].values
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=0, stratify=y)
return x_train, x_test, y_train, y_test
MinMaxScaler
를 이용한 구현def min_max_scaling():
x_train, x_test, y_train, y_test =get_dataset()
## feature scaling
# min-max scaling (normalization)
mms = MinMaxScaler()
x_train_norm = mms.fit_transform(x_train) # train set 으로 파라미터 학습
x_test_norm = mms.transform(x_test) # 학습한 파라미터로 transform
각 feature 의 평균을 0, 표준편차(standard deviation) 를 1로
이상치 (outlier) 에 덜 민감한 편
min-max scaling
은 최소, 최대치를 기준으로 scaling 하므로, outlier 로 인해 샘플 구간이 좁아지는 문제가 발생수식으로는 아래와 같다
StandardScaler
를 이용한 구현fit_transform
으로 train dataset 에만 적용tranform
메소드로 변환with_mean=False
지정하면 사용 가능def standard_scaling():
x_train, x_test, y_train, y_test = get_dataset()
# standardization
std_scaler = StandardScaler()
x_train_std = std_scaler.fit_transform(x_train) # train set 으로 파라미터 학습
x_test_std = std_scaler.transform(x_test) # 학습한 파라미터로 transform
RobustScaler
def robust_scaling():
x_train, x_test, y_train, y_test = get_dataset()
# scaling
robust_scaler = RobustScaler()
x_train_robust = robust_scaler.fit_transform(x_train) # train set 으로 파라미터 학습
x_test_robust = robust_scaler.transform(x_test) # 학습한 파라미터로 transform
def max_abs_scaling():
x_train, x_test, y_train, y_test = get_dataset()
# scaling
max_abs_scaler = MaxAbsScaler()
x_train_robust = max_abs_scaler.fit_transform(x_train) # train set 으로 파라미터 학습
x_test_robust = max_abs_scaler.transform(x_test) # 학습한 파라미터로 transform