머신러닝을 위한 전처리 과정 중 결측값을 처리하는 방법이다.
import pandas as pd
df = pd.read_csv("mldata.csv")
# X,y 분리
X = df.drop('y', axis = 1)
y = df['y']
# validation
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state = 50)
결측값 확인 및 제거
df.isnull().sum(axis = 0) #결측값 확인
df.dropna(inplace = True) #결측값 제거
결측값 대체 - ① 대푯값
평균, 중앙값, 최빈값 등을 사용한다.
from sklearn.impute import SimpleImputer
# SimpleImputer의 인스턴스 생성 (평균)
imputer = SimpleImputer(strategy = "mean")
# train 데이터 결측 평균으로 대체
imputer.fit(X_train)
Z_train = pd.DataFrame(imputer.transform(X_train), columns = X_train.columns)
Z_test = pd.DataFrame(imputer.transform(X_test), columns = X_test.columns)
# 특성별로 다른 대푯값 적용
from sklearn.compose import make_column_transformer
transformer = make_column_transformer(
(SimpleImputer(), [0]), #첫번째열은 평균
(SimpleImputer(strategy='median'), [1]), #두번째열은 중앙값
remainder='passthrough') #정의하지않은 변수는 그대로 둠
transformer = make_column_transformer(
(SimpleImputer(), ['score','number']), #score,number열은 평균
(SimpleImputer(strategy='median'), ['weight']), #weight열은 중앙값
remainder='passthrough') #정의하지않은 변수는 그대로 둠
결측값 대체 - ② 이웃값
결측값이 아닌 이웃값들을 활용한 대푯값 사용
특징 간 상관관계가 존재할 때 적합하다
from sklearn.impute import KNNImputer
# 특징간 상관관계 확인
X_train.corr().sum() / len(X_train.columns)
imputer = KNNImputer(n_neighbors=5) #default:n_neighbors=5
imputer.fit(X_train)
Z_train = pd.DataFrame(imputer.transform(X_train), columns = X_train.columns)
Z_test = pd.DataFrame(imputer.transform(X_test), columns = X_test.columns)
참고 서적 : GIL's LAB, 「파이썬을 활용한 머신러닝 자동화 시스템 구축」, 위키북스(2022)
'⚙️ Tech > ML' 카테고리의 다른 글
[ML] 사이킷런 지도 학습 클래스 정리 (0) | 2025.02.12 |
---|---|
[ML/python] 필터링 기반 특징 선택 (Feature selection, Filter Method, SelectKBest) (0) | 2025.02.10 |
[ML/python] 불균형데이터 오버샘플링, 언더샘플링 (SMOTE, NearMiss) (0) | 2025.02.09 |
[ML/python] 스케일링 (정규화, 표준화, Normalization, Min-Max Scaling, Standardization, Z-score Scaling) (0) | 2025.02.09 |
[ML/python] 범주형, 서열형 변수 처리 (더미화, 치환) (0) | 2025.02.09 |