ML_Preprocessing_Encoder & Scaler

MR.HAN·2024년 2월 19일

ML

목록 보기
1/2

Label_Encoder

  • 문자형 데이터를 숫자형 데이터로 변환할 때 사용
from sklearn.preprocessing import LabelEncoder

# df 정의했다고 가정

# 1번
# fit
le = LabelEncoder()
le.fit(df['A'])

# 'A'컬럼의 변환되는 문자 데이터 찾기
le.classes_

# 'A' 컬럼을 변환한 'le_A' 컬럼을 데이터프레임에 추가
df['le_A'] = le.transform(df['A'])

# 2번-한번에
df['le_A'] = le.fit_transform(df['A'])
  • 역변환 (숫자형 데이터를 다시 문자형 데이터로 변환)
le.inverse_transform(df['le_A'])

Min-Max Scaler

  • 데이터의 min을 0으로 max를 1로 변환 (정규화)
from sklearn.preprocessing import MinMaxScaler

# df 정의했다고 가정

# fit
mms = MinMaxScaler()
mms.fit(df)

# max, min, range 찾기
mms.data_max_
mms.data_min_
mms.data_range_

# transform - 전체를 변환한 것을 데이터 프레임으로 저장
df_mms = mms.transform(df)

# 한번에
df_mms = fit_transform(df)

# 역변환
mms.inverse_transform(df_mms)

Standard Scaler

  • 데이터의 평균을 0으로 표준편차를 1로 변환 (표준화)
from sklearn.preprocessing import StandardScaler

# fit
ss = StandardScaler()
ss.fit(df)

# 평균, 표준편차 찾기
ss.mean_
ss.scale_

# transform
df_ss = ss.transform(df)

# 한번에 하는 방법과 역변환은 이제 생략

Robust Scaler

  • 데이터의 Q2(median)를 0으로 Q3-Q1(50%의 데이터 길이)을 1로 변환
import pandas as pd
from sklearn.preprocessing import MinMaxScaler, StandardScaler, RobustScaler

# df 정의
df = pd.DataFrame({
	'A' : [-0.1, 0., 0.1, 0.2, 0.3, 0.4, 1.0, 1.1, 5]
    })

# Scaler instantiation
mm = MinMaxScaler()
ss = StandardScaler()
rs = RobustScaler()

# 데이터프레임 복사본
df_scaler = df.copy()

# fit, transform
df_scaler['MinMax'] = mm.fit_transform(df)
df_scaler['Standard'] = ss.fit_transform(df)
df_scaler['Robust'] = rs.fit_transform(df)
# Scaler 적용한 데이터의 Boxplot
import seaborn as sns
import matplotlib.pyplot as plt

sns.set_theme(style="whitegrid")
plt.figure(figsize=(16, 6))
sns.boxplot(data=df_scaler, orient='h');
  • A라는 데이터에는 outlier 존재
  • minmaxscaler, standardscaler는 outlier의 영향을 크게 받음.
  • 반면에 robustscaler는 영향을 크게 받지 않음.(outlier는 크게 벗어난 채로 존재)

0개의 댓글