최적 모델 튜닝하기
Coddy Machine Learning 여정의 지도 학습 섹션에 포함된 레슨. 58개 중 53번째.
k-NN은 기본값인 이웃 5개로 우승했습니다. 다른 k 값이면 펭귄을 더 잘 분류할까요? 그리드 검색은 교차 검증을 사용해 나열한 모든 k의 점수를 매깁니다. 종양 스캔의 경우는 다음과 같습니다:
파이프라인 튜닝에서와 마찬가지로, k는 해당 단계의 이름을 따릅니다:
{"kneighborsclassifier__n_neighbors": [3, 5, 7]}폴드의 표준편차보다 작은 향상은 운일 수 있습니다. 튜닝도 훈련 행만 사용합니다.
챌린지
중급k-NN 파이프라인은 pipe이고, default에는 k = 5일 때의 CV 정확도가 저장되어 있습니다. 프로그램은 시도할 k 값들을 ks에 읽어 들입니다.
- 훈련 행에 대해 5개 폴드로 해당 값들을 그리드 탐색하세요.
- 가장 좋은 k와 해당 CV 정확도를 소수점 이하 3자리까지 출력하세요.
- k = 5일 때보다 향상된 값을 소수점 이하 3자리까지 출력하세요.
다른 군집에서 그리드가 3, 5, 9인 경우:
Best k: 3
CV accuracy: 0.969
Gain over k = 5: 0.009그다음 21부터 27까지처럼 큰 값만 시도해 보세요. 튜닝은 항상 도움이 될까요?
직접 해보기
import pandas as pd
from sklearn.model_selection import train_test_split, cross_val_score, GridSearchCV
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import make_pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.neighbors import KNeighborsClassifier
# Meet the Penguins의 펭귄 군집, 특성과 레이블
penguins = pd.read_csv("penguins.csv")
numbers = ["bill_length_mm", "bill_depth_mm", "flipper_length_mm", "body_mass_g"]
text = ["island", "sex"]
X = penguins[numbers + text]
y = penguins["species"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, stratify=y, random_state=0)
# Prepare the Data에서 가져온 두 경로
number_steps = make_pipeline(SimpleImputer(strategy="median"), StandardScaler())
text_steps = make_pipeline(SimpleImputer(strategy="constant", fill_value="unknown"), OneHotEncoder())
prep = ColumnTransformer([("numbers", number_steps, numbers), ("words", text_steps, text)])
# Choose a Model에서 선택한 모델, 기본 k = 5인 k-NN
pipe = make_pipeline(prep, KNeighborsClassifier())
default = cross_val_score(pipe, X_train, y_train, cv=5).mean()
# 시도할 k 값들
n = int(input())
ks = []
for i in range(n):
ks.append(int(input()))
# 아래에 코드를 작성하세요
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
지도 학습의 모든 레슨
직접 연습해 보세요: 온라인 Python 컴파일러