오늘도 전처리에 대해 배워보려고 합니다. 오늘은 전처리중 스케일링과 원핫인코딩에 대해 배워보도록하겠습니다.
스케일링(scaling)이란 데이터를 전처리 하는 과정중 하나로, 데이터의 범위 또는 범위를 같게 설정해 주는 것입니다.
주로 사용되는 개념으로는
* 주의사항
원핫 인코딩(one-hot encoding)이란 3가지 특성을 가집니다.
input
from patsy import demo_data
import pandas as pd
df=pd.DataFrame(demo_data('x1','x2','x3','x4','x5'))
df
output
patsy로 데모데이터를 만들어 pands를 이용하여 데이터프라임을 변형시켜 줍니다.
input
df.boxplot()
output
boxplot 함수를 이용하여 데이터의 분포를 확인합니다. 박스는 데이터의 범위, 초록선은 데이터의 중앙값을 나타내줍니다.
input
from sklearn.preprocessing import StandardScaler
scaler=StandardScaler()
df2=scaler.fit_transform(df) #평균 0, 표준편차 1이 되도록 스케일링
df3=pd.DataFrame(df2, columns=df.columns)
df3
output
StandardScaler함수를 통해 데이터를 스케일링 해주면 평균이 0 표준편차가 1이 되도록 스케일링을 진행할 수 있습니다.
input
df3.boxplot()
output
이번에는 이상값을 넣어 데이터가 어떻게 바뀌는지 확인해 보겠습니다.
input
import numpy as np
X=np.arange(7).reshape(7,1) #7행 1열의 2차원 배열
X
output
array([[0],
[1],
[2],
[3],
[4],
[5],
[6]])
0~7까지 배열을 만들어 주고,
input
scaler=StandardScaler()
scaler.fit_transform(X)
output
array([[-1.5],
[-1. ],
[-0.5],
[ 0. ],
[ 0.5],
[ 1. ],
[ 1.5]])
input
X2=np.vstack([X, [[1000]]]) #세로로 쌓음
X2
output
array([[ 0],
[ 1],
[ 2],
[ 3],
[ 4],
[ 5],
[ 6],
[1000]])
1000이라는 이상치를 vstrack함수를 이용하여 넣어줍니다.
input
scaler.fit_transform(X2)
output
array([[-0.38705669],
[-0.38402392],
[-0.38099115],
[-0.37795839],
[-0.37492562],
[-0.37189286],
[-0.36886009],
[ 2.64570872]])
스케일링 후에도 이상치(outlier)의 영향력이 강하다는 것을 알 수있습니다. 이런 데이터는 잘못된 영향을 초례할 수 있기때문에
input
from sklearn.preprocessing import RobustScaler
scaler=RobustScaler()
# 이상치의 영향력을 감소시키기 위해 중앙값 0, IQR(InterQuartile Range)이 1이 되도록 변환
scaler.fit_transform(X2)
output
array([[-1.00000000e+00],
[-7.14285714e-01],
[-4.28571429e-01],
[-1.42857143e-01],
[ 1.42857143e-01],
[ 4.28571429e-01],
[ 7.14285714e-01],
[ 2.84714286e+02]])
standardscaler가 아닌 robustscarler를 해줍으로써 이상치의 영향력을 감소 시킬 수 있습니다.
input
df=pd.DataFrame(['A','B','AB','O'],columns=['x'])
df
output
input
df2=pd.get_dummies(df3['x'],prefix='blood')
df2
output
모든 칼럼이 나뉘어지면서 0과 1로 원-핫 인코딩이 된 것을 확인 할 수 있습니다. 1이 어느 곳에 들어가는 지에 따라 나타내주는 값이 달라지기 때문에 원-핫 인코딩을 사용할때는 주의가 필요합니다.
여기까지 전처리에 대해 알아 보았습니다. 오늘도 고생하셨습니다.