Menu
CoddyTech

Quão bom é o ajuste?

Parte da seção Estatística para ML do Journey de Machine Learning da Coddy. Lição 39 de 64.

Toda nuvem recebe uma linha, então os ajustes precisam de notas. Um marinheiro registrou as velocidades do vento e do barco: compare os erros quadráticos da linha com os da média, o palpite mais preguiçoso:

Dois painéis com seis pontos, velocidade do barco em função do vento. À esquerda: uma linha horizontal na média, com longas distâncias vermelhas até os pontos, erros quadráticos 16.23. À direita: a linha ajustada, com pequenas distâncias vermelhas, erros quadráticos 0.35

R ao quadrado é a parcela dessa variação que a linha explica:

wind = np.array([6, 8, 10, 12, 15, 18])
boat = np.array([3.1, 4.4, 4.9, 6.2, 6.8, 8.1])
slope, intercept = np.polyfit(wind, boat, 1)
predicted = slope * wind + intercept
ss_res = ((boat - predicted) ** 2).sum()  # o ajuste: 0.35
ss_tot = ((boat - boat.mean()) ** 2).sum()  # a média: 16.23
print(np.round(1 - ss_res / ss_tot, 3))

Isso imprime 0.979: a linha explica 98% da variação da velocidade. 1 representa uma linha perfeita, 0 não é melhor do que a média.

É a pontuação padrão de um modelo que prevê números. Para uma reta ajustada, ela é igual ao r ao quadrado.

challenge icon

Desafio

Médio

Uma fazenda de cogumelos registrou 16 canteiros de cultivo em mushrooms.csv. O programa lê o nome de uma coluna, e o código inicial ajusta a reta que prevê harvest_kg com base nela. O relatório precisa de r_squared, que ainda está vazio.

  1. Complete r_squared(y, predicted) para que retorne o R quadrado.
  2. No final, imprima a verificação: a correlação entre x e y, elevada ao quadrado, multiplicada por 100 e arredondada para 1 casa decimal.

Para outra fazenda e a entrada humidity:

humidity explains 27.0% of the harvest variation
Check with r squared: 27.0%

Experimente você mesmo

import numpy as np
import pandas as pd


# Retorna o R ao quadrado das previsões para y
def r_squared(y, predicted):
    # Escreva seu código aqui
    return 0


beds = pd.read_csv("mushrooms.csv")
column = input()
# Não altere as linhas abaixo
x = beds[column]
y = beds["harvest_kg"]
slope, intercept = np.polyfit(x, y, 1)
predicted = slope * x + intercept
r2 = r_squared(y, predicted)
print(f"{column} explains {np.round(r2 * 100, 1)}% of the harvest variation")

# Escreva seu código abaixo
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Estatística para ML

Pratique por conta própria: Compilador de Python online