Menu
CoddyTech

복습: 스케이트보드 수리

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

challenge icon

챌린지

중급

스케이트 공원의 대여 데스크에서는 반납된 보드 중 수리가 필요한 보드를 찾아내는 모델을 원합니다. 프로그램은 시도할 가장 큰 k를 읽습니다.

  1. 25%를 테스트 행으로 분리합니다(random_state=0).
  2. ks의 각 k에 대해 학습 행에서 k-NN 교차 검증을 수행합니다(cv=5). 평균을 막대그래프로 그리고 가장 좋은 k를 출력합니다.
  3. depths의 값으로 트리의 max_depth를 그리드 검색하고(cv=5, random_state=0) 가장 좋은 값을 출력합니다.
  4. 평균이 더 높은 모델이 승리합니다. 해당 모델의 테스트 정확도와 함께 Winner: k-NN 또는 Winner: tree를 출력합니다.

다른 공원에서 13을 입력하면:

Best k: 13 (mean 0.785)
Best depth: 5 (mean 0.763)
Winner: k-NN, test accuracy 0.822

그러면 Coddy가 차트를 설명합니다. 차트는 다음과 같습니다.

Skateboard Repairs: Accuracy by k라는 제목의 막대그래프. 1부터 13까지 각 k에 대해 막대 하나씩 표시되며, 축 범위는 0.6부터 0.9까지입니다. 작은 k에서는 0.72 부근에서 오르내리다가 k = 13에서 0.785까지 올라갑니다

직접 해보기

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split, cross_val_score, GridSearchCV
from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier

# 시도할 가장 큰 k 값, 예를 들어 15
max_k = int(input())

# 반납된 스케이트보드 한 대당 한 행: 마지막 정비 이후 대여 횟수, 0부터 10까지의 마모 점수
# 그리고 데크의 균열; repair의 1은 정비소에 들어갔음을 뜻함
boards = pd.read_csv("skateboards.csv")
features = ["rentals", "wheel_wear", "bearing_noise", "grip_wear", "truck_wobble", "deck_cracks"]
X = boards[features]
y = boards["repair"]
# 모든 특성이 작은 횟수나 점수이므로 여기서는 k-NN에 스케일러가 필요하지 않음
ks = list(range(1, max_k + 1, 2))
depths = [2, 3, 4, 5, 6, 7, 8]

fig, ax = plt.subplots()
ax.set_title("Skateboard Repairs: Accuracy by k")
ax.set_xlabel("k (neighbors)")
ax.set_ylabel("Mean CV accuracy")
ax.set_xticks(ks)
ax.set_ylim(0.6, 0.9)  # 작은 차이도 보이도록 0.6에서 시작함

# 아래에 코드를 작성하세요

지도 학습의 모든 레슨

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