Menu
CoddyTech

Medindo erros

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

Qual é o erro do modelo, em dólares? Aqui está um modelo de preço de casas em cinco casas de teste que ele nunca viu:

Cinco barras, uma por casa de teste, mostrando o tamanho do erro do modelo de preços: 20, 40, 10, 90 e 30 mil dólares. Uma linha tracejada marca o MAE em 38, e uma pontilhada marca o RMSE em 47.1, acima dele por causa do grande erro de 90

sklearn.metrics mede os erros para você:

from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score

y_test = np.array([290, 410, 235, 520, 330])  # milhares de dólares
pred = np.array([270, 450, 245, 430, 360])
print(mean_absolute_error(y_test, pred))
print(np.round(np.sqrt(mean_squared_error(y_test, pred)), 1))
print(np.round(r2_score(y_test, pred), 3))

Isso imprime:

38.0
47.1
0.776

O MAE, erro absoluto médio, é o erro típico: 38 mil. O RMSE eleva os erros ao quadrado, calcula a média e, em seguida, extrai a raiz: um erro grande eleva o resultado para 47.

Ambos são expressos nas unidades do alvo. r2_score é o seu R ao quadrado: 78% da dispersão dos preços é explicada.

challenge icon

Desafio

Médio

Uma loja define os preços de câmeras usadas com um modelo. Uma segunda característica ajuda? O programa lê shutter_k (milhares de fotos tiradas) ou megapixels. O código inicial ajusta dois modelos, um apenas com age_years e outro com a característica extra, mantendo suas previsões de teste em preds.

  1. Para cada modelo, imprima seu MAE, RMSE (1 casa decimal) e R squared (3 casas decimais).
  2. Imprima aquele com o menor MAE.

Para outra loja e shutter_k:

age_years: MAE 212.4, RMSE 268.1, R squared 0.853
age_years + shutter_k: MAE 98.7, RMSE 121.0, R squared 0.97
Better: age_years + shutter_k, off by 98.7 dollars on a typical camera

Experimente você mesmo

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression

# Uma linha por câmera vendida: idade, número de disparos do obturador em milhares, megapixels, preço em dólares
cameras = pd.read_csv("cameras.csv")
extra = input()
names = ["age_years", "age_years + " + extra]
columns = [["age_years"], ["age_years", extra]]
# Divida as linhas inteiras; cada modelo abaixo seleciona suas próprias colunas
X_train, X_test, y_train, y_test = train_test_split(cameras, cameras["price"], test_size=0.25, random_state=0)
# Um modelo para cada lista de colunas e suas previsões para as câmeras de teste
preds = []
for cols in columns:
    model = LinearRegression()
    model.fit(X_train[cols], y_train)
    preds.append(model.predict(X_test[cols]))

# 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 Aprendizado supervisionado

Pratique por conta própria: Compilador de Python online