파이프라인에서 결측값 대체하기
Coddy Machine Learning 여정의 지도 학습 섹션에 포함된 레슨. 58개 중 47번째.
실제 로그에는 누락된 값이 있으며, 대부분의 모델은 이를 허용하지 않습니다. SimpleImputer는 각 누락된 값을 해당 열의 평균, 중앙값 또는 최빈값으로 채웁니다.
분할하기 전에 채우면 테스트 행이 그 값을 선택하는 데 도움이 됩니다. 바로 데이터 누수입니다. 잠수 깊이 7개와 결측값 하나:
파이프라인에서 fit은 훈련 행만을 사용해 대체값을 학습합니다:
from sklearn.impute import SimpleImputer
pipe = make_pipeline(SimpleImputer(strategy="median"), StandardScaler(), model)
pipe.fit(X_train, y_train)
print(pipe[0].statistics_) # 첫 번째 단계에서 결측값을 채우는 값들다이빙 기록(수심, 분, 수온)의 경우, 다음을 출력합니다:
[19. 44. 21.]단어와 마찬가지로 숫자 처리 단계도 ColumnTransformer의 한 레인이 됩니다:
lane = make_pipeline(SimpleImputer(strategy="median"), StandardScaler())
("numbers", lane, ["depth_m", "minutes"])챌린지
중급산림 관리 기관은 어떤 낙뢰가 화재를 일으키는지 예측하지만, 일부 측정값이 누락되어 있습니다. 시작 코드에서는 wildfire.csv를 분할하고 전략인 mean 또는 median을 읽습니다.
- 해당 전략을 사용하는 대치기, 스케일러, 로지스틱 회귀로 파이프라인을 학습시키세요. 테스트 정확도를 출력하세요.
- 각 열에 대해 파이프라인의 대체값과
X의 모든 행을 사용했을 때의 값을 소수점 1자리까지 출력하세요.
다른 숲의 경우, median을 사용하면:
Test accuracy: 0.840
humidity_pct: fill 46.0, all rows would give 46.0
wind_kmh: fill 29.0, all rows would give 32.0
temp_c: fill 25.0, all rows would give 26.0
days_without_rain: fill 23.0, all rows would give 23.0두 값이 다른 경우, 분할 전에 결측값을 채웠다면 테스트 행이 학습 데이터를 좌우하게 되었을 것입니다.
직접 해보기
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import make_pipeline
# 건조한 숲에 번개가 쳤습니다. 그 번개로 산불이 발생했나요 (1), 아니면 발생하지 않았나요 (0)?
# 일부 기상 관측값이 누락되었습니다.
strikes = pd.read_csv("wildfire.csv")
columns = ["humidity_pct", "wind_kmh", "temp_c", "days_without_rain"]
X = strikes[columns]
y = strikes["fire"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
strategy = input()
# 아래에 코드를 작성하세요
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
지도 학습의 모든 레슨
직접 연습해 보세요: 온라인 Python 컴파일러