1. 결측치 처리 전략
- NaN 데이터 모두 삭제 (complete drop)
- 데이터가 없는 최소의 개수 등의 규칙을 정해 삭제
- 데이터가 거의 없는 feature는 feature 자체를 삭제
- 최빈값, 평균값으로 NaN을 보간
- KNN 같은 방법을 사용하여 근사 instance의 값으로 보간
# 결측치 확인하기
# nan 값이 얼마나 있는지 column별로 확인
df.isnull().sum()
# 전체 data 개수 대비 NaN의 비율
df.isnull().sum() / len(df)
# 결측치가 있는 row 삭제
# 튜플에서 데이터가 하나라도 없으면 삭제
df = df.dropna()
# 모든 데이터가 NaN일 때만 삭제
df = df.dropna(how='all')
# column을 기준으로 nan 값이 4개 이상이면 해당 column 삭제
df = df.dropna(axis=1, thres=3)
# 결측치를 보간
# NaN을 0으로 채워버리기
df.fillna(0)
# 평균값으로 채워버리기
df['col1'].fillna(df['col1'].mean(), inplace=True)
# 그룹 범주로 나눠서 그룹별 평균값으로 채워버리기
df['col1'].fillna(df.groupby('sex')['col1'].transform('mean'), inplace=True)
# 컬럼 A와 B 모두 Null이 아닌 경우만 표시
df[df['A'].notnull() & df['B'].notnull()]
2. 범주형 변수 처리 전략
- One Hot Encoding (일반적인 범주형 데이터 분석)
- Data Binding
# One Hot Encoding
# 데이터프레임에서 object 타입으로 되어있는 변수는 dummy 변수화
pd.get_dummies(df)
# 특정 컬럼에 대해서만 dummy 변수화한 df 반환
pd.get_dummies(df['colA'])
#대괄호가 두번 들어가면 prefix로 변수명이 붙어서 반환
pd.get_dummies(df[['colA']])
# Data Binning
# 연속형 데이터를 구간으로 나누어 범주화하는 방법
# 구간을 설정한다. (0~25, ... , 75~100)
bins = [0, 25, 50, 75, 100]
# 구간별 이름
bins_names = ['A', 'B', 'C', 'D', 'E']
categories = pd.cut(df['score'], bins, labels=bins_names)
categories
3. Feature Scaling 전략
- 신경망 모델 뿐만 아니라 Ridge, Lasso 같은 선형회귀 모델에서도 데이터의 feature를 맞춰줘야 할 필요가 있음.
- 데이터의 값이 너무 크거나 작아 변수의 영향이 제대로 반영되지 않음.
- 알고리즘의 계산 과정에서 0으로 수렴하거나 값이 너무 커져버리거나 할 수 있음.
- Min-Max Normalization
- Standardization
# Min-Max Nomarlization
from sklearn.preprocessing import MinMaxScaler
minmax_scale = MinMaxScaler(feature_range=[0,1]).fit(df[['A', 'B']])
df_minmax = minmax_scale.transform(df[['A', 'B']])
# Standardization
from sklearn.preprocessing import StandardScaler
std_scale = StandardScaler().fit(df[['A', 'B']])
df_std = std_scale.transform(df[['A', 'B']])
'Programming > Machine Learning' 카테고리의 다른 글
Matplotlib 실습 (0) | 2020.02.16 |
---|---|
DataFrame 실습 (0) | 2020.02.16 |
파이프라인 (0) | 2020.02.16 |
이진 분류 (0) | 2020.02.16 |
그리드 서치 (0) | 2020.02.16 |