sklearn(머신러닝)

김다희·2024년 6월 26일

1. LabelEncoder()

: 문자 데이터를 숫자-범주형 데이터로 변환

  • import
import pandas as pd
  • 데이터 생성
df = pd.DataFrame({
    'A' : ['a', 'b', 'c', 'a', 'b'],
    'B' : [1, 2, 3, 1, 0] 
})
df

  • labelencoder에 fit해주기
from sklearn.preprocessing import LabelEncoder

le = LabelEncoder()
le.fit(df['A'])
  • 어떤 값이 변환되었는지 확인
le.classes_

-> array(['a', 'b', 'c'], dtype=object)

  • fit한 값을 숫자-범주형 값으로 변환해주기
df['le_A'] = le.transform(df['A'])
df

  • fit과 transform을 한번에
le.fit_transform(df['A'])

-> array([0, 1, 2, 0, 1])

  • 기존의 값이 어떤 값으로 변경되었는지 확인
le.transform(['a'])

-> array([0])

  • 변경된 값을 원래의 값으로 변환
le.inverse_transform(df['le_A'])

-> array(['a', 'b', 'c', 'a', 'b'], dtype=object)

2. min-max scaling

  • 분자: min을 0으로 보내는 것

  • 분모: 크기를 1로 바꾸는 것

  • 데이터 생성

df = pd.DataFrame({
    'A' : [10, 20, -10, 0, 25],
    'B' : [1, 2, 3, 1, 0] 
})
df

  • fit
from sklearn.preprocessing import MinMaxScaler

mms = MinMaxScaler()
mms.fit(df)
  • 최댓값, 최솟값 확인
mms.data_max_, mms.data_min_

-> (array([25., 3.]), array([-10., 0.]))

  • transform
df_mms = mms.transform(df)
df_mms

  • inverse
mms.inverse_transform(df_mms)

  • 한번에
mms.fit_transform(df)

3. standardScaler

: 방법은 min-max Scaler와 같음!

  • fit
from sklearn.preprocessing import StandardScaler

ss = StandardScaler()
ss.fit(df)
  • 평균, 표준편차 확인
ss.mean_, ss.scale_

-> (array([9. , 1.4]), array([12.80624847, 1.0198039 ]))

  • transform
df_ss = ss.transform(df)
df_ss

  • 한번에
ss.fit_transform(df)
  • inverse
ss.inverse_transform(df_ss)

4. Robust Scaler

  • 여기서의 q1, q2~~ 는 boxplot에서의 q들을 말하는 것 말하는 것

  • q3 - q1: 제사분위수(50%)

  • 중앙값을 0으로 보내겠다는 것

  • 데이터 준비

df = pd.DataFrame({
    'A': [-0.1, 0., 0.1, 0.2, 0.3, 0.4, 1.0 , 1.1, 5]
})
  • minmax, standard, robust 사용해보기
from sklearn.preprocessing import MinMaxScaler, StandardScaler, RobustScaler

mm = MinMaxScaler()
ss = StandardScaler()
rs = RobustScaler()
  • fit
df_scaler['MinMax'] = mm.fit_transform(df)
df_scaler['Standard'] = ss.fit_transform(df)
df_scaler['Robust'] = rs.fit_transform(df)
  • df_scalar 확인
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');

  • 애초에 원본 데이터에 이상치(5)가 있었음
  • minmax는 이상치가 있을 때 영향을 많이 받음
  • robust는 중앙값을 0으로 만들고, 중앙값은 이상치의 영향을 크게 받지 않기 때문에 이상치가 boxplot 배치에 영향을 주지 않음, 또한 이상치는 이상치대로 있게 됨
profile
안녕하세요

0개의 댓글