◾Label_Encoder
Label Encoder
: 카테고리 피처를 코드형 숫자 값으로 변환
- sklearn에서는 숫자만 사용가능하므로 카테고리들을 숫자로 변환해야한다.
- 또는 숫자를 문자로 역변환 시킬 수 있다.
import pandas as pd
df = pd.DataFrame({
'A' : ['a', 'b', 'c', 'a', 'b'],
'B' : [1, 2, 3, 1, 0]
})
df
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
le.fit(df['A'])
le.classes_
le.transform(df['A'])
df['le_A'] = le.transform(df['A'])
df
le.inverse_transform(df['le_A'])
◾Min-Max Scaler
min-max Scaler
: x‘ = max(x)−min(x)x−min(x)
- 수치를 0 ~ 1 범위로 정규화를 할 때 사용한다.
df = pd.DataFrame({
'A' : [10, 20, -10, 0, 25],
'B' : [1, 2, 3, 1, 0]
})
df
from sklearn.preprocessing import MinMaxScaler
mms = MinMaxScaler()
mms.fit(df)
mms.data_max_, mms.data_min_, mms.data_range_
df_mms = mms.transform(df)
df_mms
mms.inverse_transform(df_mms)
◾Standard Scaler
standard scaler
: z=σX−μ
from sklearn.preprocessing import StandardScaler
ss = StandardScaler()
ss.fit(df)
ss.mean_, ss.scale_, ss.var_
df_ss = ss.transform(df)
df_ss
ss.inverse_transform(df_ss)
◾Robust Scaler
robust scaler
: Q3−Q1xi−Q2
- 중앙값을 0로 만든다.
- 이상값에 대해 강력한 통계를 사용하여 기능을 확장
- 중앙값을 제거하고 분위수 범위(기본값은 IQR: 사분위수 범위)에 따라 데이터를 조정합니다. IQR은 1사분위수(25분위수)와 3사분위수(75분위수) 사이의 범위
df = pd.DataFrame({
'A' : [-0.1, 0, 0.1, 0.2, 0.3, 0.4, 1.0, 1.1, 5.0, ]
})
df
from sklearn.preprocessing import MinMaxScaler, StandardScaler, RobustScaler
mm = MinMaxScaler()
ss = StandardScaler()
rs = RobustScaler()
df_scaler = df.copy()
df_scaler["MinMax"] = mm.fit_transform(df)
df_scaler["Standard"] = ss.fit_transform(df)
df_scaler["Robust"] = rs.fit_transform(df)
df_scaler
◾Scaler 비교
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_theme(style='whitegrid')
plt.figure(figsize=(16, 6))
sns.boxplot(data=df_scaler, orient='h')
plt.show()
- 기본 데이터에 outlier이 있는 것 확인
- min-max scaler : outlier에 영향을 받아 이상해질 수 있다. 최소값이 0으로 고정된다.
- standard scaler : outlier에 영향을 받아 이상해질 수 있다.
- robust scaler : outlier에 의한 영향이 줄어든다. 중앙값(median)이 0으로 고정되고 IQR이 1로 고정된다.