Menu
CoddyTech

Várias classes

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

Limão-siciliano, limão-taiti ou laranja? A regressão logística também lida com três classes. Aqui, uma nova fruta fica entre os limões-sicilianos e as laranjas:

À esquerda: 45 frutas por diâmetro e peso, limões-taiti pequenos, limões-sicilianos no meio, laranjas grandes e uma estrela preta para uma nova fruta entre limões-sicilianos e laranjas. À direita: suas chances em barras, limão-siciliano 0.61, limão-taiti 0.00, laranja 0.39

model = LogisticRegression(max_iter=1000)
model.fit(X, kind)  # X: diâmetro, peso; kind: limão-siciliano, lima ou laranja
print(model.classes_)
print(np.round(model.predict_proba([[6.7, 144]]), 2))
print(model.predict([[6.7, 144]]))

Isso imprime:

['lemon' 'lime' 'orange']
[[0.61 0.   0.39]]
['lemon']

Cada linha contém uma probabilidade para cada classe, na ordem de classes_, e a soma delas é 1. predict escolhe a maior.

Então, o modelo indica o quanto tem certeza: 61% de limão é uma decisão apertada, que merece uma segunda análise.

challenge icon

Desafio

Médio

Um aplicativo de podcasts classifica novos episódios como comédia, notícias ou true crime. O código inicial ajusta uma LogisticRegression a partir de episodes.csv (duração, participantes, risadas por minuto) e lê um novo episódio em episode, uma tabela de uma linha.

Complete describe(episode):

  1. Imprima a probabilidade de cada tipo de programa, na ordem de model.classes_, como uma porcentagem inteira.
  2. Retorne o tipo mais provável.

Para o episódio de outro aplicativo:

comedy: 12%
news: 70%
true crime: 18%
Best guess: news

Experimente você mesmo

import pandas as pd
from sklearn.linear_model import LogisticRegression

episodes = pd.read_csv("episodes.csv")
features = ["length_min", "speakers", "laughs_per_min"]
model = LogisticRegression(max_iter=1000)
model.fit(episodes[features], episodes["show_type"])


# Imprime a probabilidade de cada tipo de programa para um episódio (uma tabela de uma linha) e depois retorna o tipo mais provável
def describe(episode):
    # Escreva seu código aqui
    return "unknown"


# Não altere as linhas abaixo: um novo episódio, fornecido pela entrada
length = float(input())
speakers = int(input())
laughs = float(input())
episode = pd.DataFrame({"length_min": [length], "speakers": [speakers], "laughs_per_min": [laughs]})
best = describe(episode)
print(f"Best guess: {best}")
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