복습: 스케이트보드 수리
Coddy Machine Learning 여정의 지도 학습 섹션에 포함된 레슨. 58개 중 40번째.
챌린지
중급스케이트 공원의 대여 데스크에서는 반납된 보드 중 수리가 필요한 보드를 찾아내는 모델을 원합니다. 프로그램은 시도할 가장 큰 k를 읽습니다.
- 25%를 테스트 행으로 분리합니다(
random_state=0). ks의 각 k에 대해 학습 행에서 k-NN 교차 검증을 수행합니다(cv=5). 평균을 막대그래프로 그리고 가장 좋은 k를 출력합니다.depths의 값으로 트리의max_depth를 그리드 검색하고(cv=5,random_state=0) 가장 좋은 값을 출력합니다.- 평균이 더 높은 모델이 승리합니다. 해당 모델의 테스트 정확도와 함께
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가 차트를 설명합니다. 차트는 다음과 같습니다.
직접 해보기
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 컴파일러