◾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
![](https://velog.velcdn.com/images%2Fskarb4788%2Fpost%2F99aa8ee0-5546-4f94-b080-bee165401029%2Fimage.png)
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
le.fit(df['A'])
le.classes_
![](https://velog.velcdn.com/images%2Fskarb4788%2Fpost%2Fdcdb7e6c-3eef-4f75-924f-0507908eb7c6%2Fimage.png)
le.transform(df['A'])
![](https://velog.velcdn.com/images%2Fskarb4788%2Fpost%2Fb87618ff-54bb-4356-8c60-5784da648868%2Fimage.png)
df['le_A'] = le.transform(df['A'])
df
![](https://velog.velcdn.com/images%2Fskarb4788%2Fpost%2F94300e66-764a-4a21-81e6-fa8afecb0437%2Fimage.png)
le.inverse_transform(df['le_A'])
![](https://velog.velcdn.com/images%2Fskarb4788%2Fpost%2F1228683c-1359-4b34-b53a-9fdac5d17621%2Fimage.png)
◾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
![](https://velog.velcdn.com/images%2Fskarb4788%2Fpost%2Ff928826b-c421-415f-8577-694a78cb09c8%2Fimage.png)
from sklearn.preprocessing import MinMaxScaler
mms = MinMaxScaler()
mms.fit(df)
mms.data_max_, mms.data_min_, mms.data_range_
![](https://velog.velcdn.com/images%2Fskarb4788%2Fpost%2F50d59c27-694d-4866-b810-668e83298234%2Fimage.png)
df_mms = mms.transform(df)
df_mms
![](https://velog.velcdn.com/images%2Fskarb4788%2Fpost%2F9c03d310-d40b-434d-9a2e-d8074acd8575%2Fimage.png)
mms.inverse_transform(df_mms)
![](https://velog.velcdn.com/images%2Fskarb4788%2Fpost%2F75d16248-9e63-45a2-b486-aee4454874fb%2Fimage.png)
◾Standard Scaler
standard scaler
: z=σX−μ
from sklearn.preprocessing import StandardScaler
ss = StandardScaler()
ss.fit(df)
ss.mean_, ss.scale_, ss.var_
![](https://velog.velcdn.com/images%2Fskarb4788%2Fpost%2F6bf67837-7839-4720-8ff2-ab51d3cd3495%2Fimage.png)
df_ss = ss.transform(df)
df_ss
![](https://velog.velcdn.com/images%2Fskarb4788%2Fpost%2Fb4ccb536-e256-4c8e-b8b0-71ae790af8fd%2Fimage.png)
ss.inverse_transform(df_ss)
![](https://velog.velcdn.com/images%2Fskarb4788%2Fpost%2Ff81060b0-3f63-4bba-aa74-18cb9d0ebf22%2Fimage.png)
◾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
![](https://velog.velcdn.com/images%2Fskarb4788%2Fpost%2Facfe9edd-474c-41d5-9d06-dbce0672a146%2Fimage.png)
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
![](https://velog.velcdn.com/images%2Fskarb4788%2Fpost%2Fcda6a288-9fbf-4516-b4ea-2d3e9b8ca57e%2Fimage.png)
◾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()
![](https://velog.velcdn.com/images%2Fskarb4788%2Fpost%2F84861d18-a992-4288-ad4b-fe33634f2538%2Fimage.png)
- 기본 데이터에 outlier이 있는 것 확인
- min-max scaler : outlier에 영향을 받아 이상해질 수 있다. 최소값이 0으로 고정된다.
- standard scaler : outlier에 영향을 받아 이상해질 수 있다.
- robust scaler : outlier에 의한 영향이 줄어든다. 중앙값(median)이 0으로 고정되고 IQR이 1로 고정된다.