Menu
CoddyTech

최적 모델 튜닝하기

Coddy Machine Learning 여정의 지도 학습 섹션에 포함된 레슨. 58개 중 53번째.

k-NN은 기본값인 이웃 5개로 우승했습니다. 다른 k 값이면 펭귄을 더 잘 분류할까요? 그리드 검색은 교차 검증을 사용해 나열한 모든 k의 점수를 매깁니다. 종양 스캔의 경우는 다음과 같습니다:

k가 1부터 29까지일 때 종양 스캔에 대한 k-NN의 평균 교차 검증 정확도: k = 3에서 별표로 표시된 0.974로 정점에 도달한 뒤, k = 29에서 0.946까지 서서히 감소합니다

파이프라인 튜닝에서와 마찬가지로, k는 해당 단계의 이름을 따릅니다:

{"kneighborsclassifier__n_neighbors": [3, 5, 7]}

폴드의 표준편차보다 작은 향상은 운일 수 있습니다. 튜닝도 훈련 행만 사용합니다.

challenge icon

챌린지

중급

k-NN 파이프라인은 pipe이고, default에는 k = 5일 때의 CV 정확도가 저장되어 있습니다. 프로그램은 시도할 k 값들을 ks에 읽어 들입니다.

  1. 훈련 행에 대해 5개 폴드로 해당 값들을 그리드 탐색하세요.
  2. 가장 좋은 k와 해당 CV 정확도를 소수점 이하 3자리까지 출력하세요.
  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()))

# 아래에 코드를 작성하세요
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

지도 학습의 모든 레슨

직접 연습해 보세요: 온라인 Python 컴파일러