모델 공정하게 비교하기
Coddy Machine Learning 여정의 지도 학습 섹션에 포함된 레슨. 58개 중 38번째.
한 번의 분할로 모델을 비교하는 것은 동전 던지기와 같습니다. 운 좋게 테스트 세트가 정해질 수도 있습니다. 대신 모든 모델에 동일한 5개의 폴드를 사용하세요. 지폐 150장을 대상으로 진짜인지 가짜인지 분류합니다.
k-NN과 로지스틱 회귀는 변동 범위 내에서 동률이며, k-NN이 더 안정적입니다. 트리는 뒤처집니다.
KFold 분할기는 행을 한 번 섞은 다음 각 모델에 동일한 폴드를 제공합니다:
from sklearn.model_selection import KFold
folds = KFold(n_splits=5, shuffle=True, random_state=0)
for model in [knn, logistic, tree]:
scores = cross_val_score(model, X, y, cv=folds)
print(f"{scores.mean():.3f} {scores.std():.3f}")차트에 숫자를 출력합니다:
0.867 0.042
0.873 0.074
0.807 0.077평균이 가장 높은 것을 선택하고, 평균이 비슷하면 표준편차가 더 작은 것을 선택하세요.
챌린지
중급요리 사이트에서 방문자가 열어 본 레시피를 요리할지 예측합니다. 시작 코드에서는 한 번의 분할로 세 모델의 점수를 매기고, 트리가 이깁니다. 공정하게 확인해 보세요. 프로그램은 폴드 수를 읽습니다.
- 그 수만큼 분할하는
KFold를 만들고,shuffle=True와random_state=0을 지정합니다. - 해당 폴드로 각 모델을 교차 검증하고, 평균과 표준 편차를 소수점 3자리까지 출력합니다.
- 평균이 가장 높은 모델을 출력합니다.
다른 방문자와 5의 경우:
One split picks: k-NN
k-NN: mean 0.833, std 0.045
logistic: mean 0.860, std 0.044
tree: mean 0.787, std 0.029
Cross-validation picks: logistic직접 해보기
import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split, cross_val_score, KFold
from sklearn.neighbors import KNeighborsClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
n_folds = int(input())
# 아래 줄은 변경하지 마세요: 방문자 300명, 탐색 습관 6가지; 레이블 1은 해당 방문자가 레시피대로 요리했음을 뜻합니다
X, y = make_classification(n_samples=300, n_features=6, n_informative=4, n_redundant=0,
flip_y=0.06, class_sep=0.8, random_state=0)
names = ["k-NN", "logistic", "tree"]
models = [KNeighborsClassifier(), LogisticRegression(max_iter=1000),
DecisionTreeClassifier(max_depth=4, random_state=0)]
# 데이터를 한 번 분할해 승자를 가립니다
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
single = []
for model in models:
model.fit(X_train, y_train)
single.append(model.score(X_test, y_test))
print(f"One split picks: {names[np.argmax(single)]}")
# 아래에 코드를 작성하세요
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
지도 학습의 모든 레슨
직접 연습해 보세요: 온라인 Python 컴파일러