Menu
CoddyTech

Wiele klas

Część sekcji Uczenie nadzorowane ścieżki Machine Learning w Coddy. Lekcja 19 z 58.

Cytryna, limonka czy pomarańcza? Regresja logistyczna radzi sobie również z trzema klasami. Oto nowy owoc, który trafia między cytryny a pomarańcze:

Po lewej: 45 owoców przedstawionych według średnicy i masy; małe limonki, cytryny pośrodku, duże pomarańcze oraz czarna gwiazdka oznaczająca nowy owoc między cytrynami a pomarańczami. Po prawej: jego szanse przedstawione jako słupki: cytryna 0.61, limonka 0.00, pomarańcza 0.39

model = LogisticRegression(max_iter=1000)
model.fit(X, kind)  # X: średnica, waga; kind: cytryna, limonka lub pomarańcza
print(model.classes_)
print(np.round(model.predict_proba([[6.7, 144]]), 2))
print(model.predict([[6.7, 144]]))

To wyświetla:

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

Każdy wiersz zawiera prawdopodobieństwo dla każdej klasy, w kolejności classes_, a ich suma wynosi 1. predict wybiera największe.

Model pokazuje, na ile jest pewny: 61% dla cytryny to niewielka przewaga, warto przyjrzeć się temu jeszcze raz.

challenge icon

Wyzwanie

Średni

Aplikacja podcastowa klasyfikuje nowe odcinki jako komedię, wiadomości lub true crime. Kod początkowy dopasowuje model LogisticRegression do danych z pliku episodes.csv (długość, liczba prowadzących, śmiechów na minutę) i wczytuje nowy odcinek do episode, czyli tabeli z jednym wierszem.

Uzupełnij describe(episode):

  1. Wypisz szansę dla każdego typu programu, w kolejności z model.classes_, zaokrągloną do pełnego procentu.
  2. Zwróć najbardziej prawdopodobny typ.

Dla odcinka z innej aplikacji:

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

Spróbuj swoich sił

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"])


# Wypisuje prawdopodobieństwo każdego typu programu dla jednego odcinka (tabela z jednym wierszem), a następnie zwraca najbardziej prawdopodobny typ
def describe(episode):
    # Wpisz tutaj swój kod
    return "unknown"


# Nie zmieniaj poniższych wierszy: nowy odcinek na podstawie danych wejściowych
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 iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Uczenie nadzorowane

Poćwicz samodzielnie: Kompilator Python online