Menu
CoddyTech

k 선택하기

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

칠리에 어떤 k가 적합할까요? 몇 가지를 시도하고 각 모델의 점수를 두 번 매겨 보세요. 학습한 행에 대한 훈련 정확도와 숨겨 둔 행에 대한 테스트 정확도입니다.

칠리의 k별 정확도, 두 개의 선. 훈련 정확도는 k = 1일 때 1.0에서 시작해 하락합니다. 테스트 정확도는 0.8에서 시작해 k = 13일 때 0.92로 최고점을 찍으며, k = 80을 넘으면 두 선 모두 약 0.7까지 하락합니다

k = 1일 때 각 고추는 자기 자신의 최근접 이웃이므로 모델은 데이터를 암기합니다. 학습 데이터에서는 완벽하지만 새로운 데이터에서는 성능이 떨어집니다. k가 너무 크면 그룹이 흐려집니다.

ks = range(1, 120, 6)
train_acc = []
test_acc = []
for k in ks:
    model = KNeighborsClassifier(n_neighbors=k)
    model.fit(X_train, y_train)
    train_acc.append(model.score(X_train, y_train))
    test_acc.append(model.score(X_test, y_test))

일단 테스트 정확도가 최고점에 이르는 k를 선택하세요. 7장에서는 더 공정한 평가 방법을 보여 줍니다.

challenge icon

챌린지

쉬움

한 축구 클럽은 슛을 shots.csv에 기록합니다. 거리, 각도, 그리고 goal 또는 miss입니다. 어떤 k가 가장 잘 예측할까요? 시작 코드는 데이터를 나누고, ks를 나열하며 차트에 레이블을 붙입니다.

  1. 각 k에 대해 모델을 학습시키고 학습 및 테스트 정확도를 저장하세요.
  2. 아래와 같이 테스트 정확도가 가장 높은 k를 출력하세요.
  3. ks에 대해 두 목록을 모두 그리세요. train과 test로 레이블을 붙이고 범례를 추가하세요.

다른 클럽의 경우:

Best k: 9 (test accuracy 0.783)

다른 클럽의 슛: k가 1부터 41까지일 때의 정확도. 학습 정확도는 k = 1일 때 0.99에서 약 0.71로 하락합니다. 테스트 정확도는 0.68에서 상승해 k = 9일 때 0.78로 정점에 이른 뒤 0.7로 내려갑니다

그런 다음 Coddy가 차트를 설명합니다.

직접 해보기

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier

# 슈팅 한 번당 한 행: 골대까지의 거리 (m), 골문을 향한 각도 (도), 득점 또는 실축
shots = pd.read_csv("shots.csv")
X = shots[["distance_m", "angle_deg"]]
y = shots["result"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
ks = range(1, 42, 4)  # k = 1, 5, 9, ..., 41

fig, ax = plt.subplots()
ax.set_title("Shots: Accuracy by k")
ax.set_xlabel("k (neighbors)")
ax.set_ylabel("Accuracy")

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

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

지도 학습의 모든 레슨

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