Menu
CoddyTech

Revisão: Consertos de Skate

Parte da seção Aprendizado supervisionado do Journey de Machine Learning da Coddy. Lição 40 de 58.

challenge icon

Desafio

Médio

O balcão de aluguel de um parque de skate quer um modelo que identifique os skates devolvidos que precisam de conserto. O programa lê o maior valor de k a ser testado.

  1. Separe 25% das linhas para teste (random_state=0).
  2. Para cada k em ks, faça validação cruzada do k-NN nas linhas de treinamento (cv=5). Mostre as médias em barras e imprima o melhor k.
  3. Faça uma busca em grade pela max_depth de uma árvore entre os valores de depths (cv=5, random_state=0) e imprima o melhor valor.
  4. O que tiver a maior média vence: imprima Winner: k-NN ou Winner: tree com sua acurácia no teste.

Para outro parque e 13:

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

Em seguida, Coddy descreve seu gráfico. O deles é assim:

Barras intituladas Reparos de skates: acurácia por k, uma para cada k de 1 a 13, eixo de 0.6 a 0.9. Elas oscilam perto de 0.72 para valores pequenos de k e, depois, sobem até 0.785 em k = 13

Experimente você mesmo

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

# O maior k a testar, como 15
max_k = int(input())

# Uma linha por skate devolvido: aluguéis desde a última manutenção, pontuações de desgaste de 0 a 10
# e rachaduras no shape; 1 em repair significa que foi para a oficina
boards = pd.read_csv("skateboards.csv")
features = ["rentals", "wheel_wear", "bearing_noise", "grip_wear", "truck_wobble", "deck_cracks"]
X = boards[features]
y = boards["repair"]
# Cada feature é uma contagem ou pontuação pequena, então k-NN não precisa de escalonamento aqui
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)  # começa em 0.6 para que pequenas diferenças fiquem visíveis

# Escreva seu código abaixo

Todas as lições de Aprendizado supervisionado

Pratique por conta própria: Compilador de Python online