[서울ICT 데이터 중급(분석) 과정]
데이터 분석을 하면서 가장 중요하고 많은 시간이 들어가는 과정은 데이터 전처리 과정이다.
전처리 방법에는 여러 방법이 있는데, 이번 포스트에서는 스케일링에 대해 살펴보겠습니다.
스케일링
표준화, 정규화는 KNN,서포터 벡터 머신(SVM)과 같은 거리, 수치계산 기반 알고리즘에 필수이다.
Q. 언제 MinMax, Standard, Robust를 선택하나요?
A.
(1) 이상치가 없으면 MinMax
(2) 이상치에 영향이 있을 것 같으면 Standard
(3) 이상치에 영향이 너무 가면 대안으로 Robust
Min-Max Scaling: 정규화(Normalization)
- 모든 데이터를 0~1사이로 꾸겨넣어 버림
- 일반적인 상황에 사용
- 박스플롯 상에 이상치가 없거나, 있어도 upper fence, lower fence 근처에 있으면
# 필요한 패키지 설치
from sklearn.preprocessing import MinMaxScaler
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
import warnings
warnings.filterwarnings("ignore", category=FutureWarning)
df = sns.load_dataset('mpg')
df = df[['mpg','cylinders','displacement','horsepower','weight','acceleration','model_year']]
df.boxplot(fontsize=6)
plt.show()
## 스케일링:정규화
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
scaled = scaler.fit_transform(df)
mm_df = pd.DataFrame(data=scaled, columns=df.columns)
mm_df.describe()
mm_df.boxplot(fontsize=6)
plt.show()
Standard Scaling 표준화(Standardization)
- 평균을 0, 표준 편차를 1로 맞춰 버림
- 이상치가 있을 때 사용
# 필요한 패키지 설치
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
import warnings
warnings.filterwarnings("ignore", category=FutureWarning)
df = sns.load_dataset('mpg')
df = df[['mpg','cylinders','displacement','horsepower','weight','acceleration','model_year']]
df.boxplot(fontsize=6)
plt.show()
## 스케일링:표준화
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaled = scaler.fit_transform(df)
ss_df = pd.DataFrame(data=scaled, columns=df.columns)
ss_df.describe()
ss_df.boxplot(fontsize=6)
plt.show()
Robust Scaling
- 중앙값(Q2)을 0으로 잡고, Q1(25%)과 Q3(75%) 사분위수와 IQR 차이를 1이 되도록 함.
- 이상치의 영향력을 최소화하여, 일반적ㅇ로 표준화, 정규화보다 성능이 우수하다고 함.
# 필요한 패키지 설치
from sklearn.preprocessing import RobustScaler
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
import warnings
warnings.filterwarnings("ignore", category=FutureWarning)
df = sns.load_dataset('mpg')
df = df[['mpg','cylinders','displacement','horsepower','weight','acceleration','model_year']]
df.boxplot(fontsize=6)
plt.show()
# 이상치 스케일링
rb_scaler = RobustScaler()
df_rb = rb_scaler.fit_transform(df)
df_rb = pd.DataFrame(data=df_rb, columns=df.columns)
df_rb.describe()
df_rb.boxplot(fontsize=6)
plt.show()
⭐ Scale 변환을 할 때는 반드시 실제 데이터는 fit()을 호출하지 않고 transform() 만으로 변환해야 함.
## 실제 데이터
x_real = [[16.0, 8, 304.0, 150.0, 3433, 12.0, 70]]
## 스케일링 fit()하면 안됨
x_real_scaled = scaler.transform(x_real)
x_real_df = pd.DataFrame(x_real_scaled,columns=df.columns)
x_real_df
'Study' 카테고리의 다른 글
파이썬) 파일과 폴더 다루기(2) (0) | 2024.03.12 |
---|---|
파이썬) 파일과 폴더 다루기(1) (0) | 2024.02.24 |
파이썬) 예외 처리 (0) | 2024.02.24 |
데이터 전처리 - 결측치 처리(1) (0) | 2024.02.12 |
광학문자판독기 : OCR (0) | 2024.02.08 |