Menu
CoddyTech

Mehrere Klassen

Teil des Abschnitts Überwachtes Lernen der Machine Learning-Journey von Coddy. Lektion 19 von 58.

Zitrone, Limette oder Orange? Die logistische Regression kann auch mit drei Klassen umgehen. Hier landet eine neue Frucht zwischen den Zitronen und den Orangen:

Links: 45 Früchte nach Durchmesser und Gewicht, Limetten klein, Zitronen in der Mitte, Orangen groß und ein schwarzer Stern für eine neue Frucht zwischen Zitronen und Orangen. Rechts: ihre Wahrscheinlichkeiten als Balken, Zitrone 0.61, Limette 0.00, Orange 0.39

model = LogisticRegression(max_iter=1000)
model.fit(X, kind)  # X: Durchmesser, Gewicht; kind: Zitrone, Limette oder Orange
print(model.classes_)
print(np.round(model.predict_proba([[6.7, 144]]), 2))
print(model.predict([[6.7, 144]]))

Dies gibt aus:

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

Jede Zeile enthält eine Wahrscheinlichkeit pro Klasse, in der Reihenfolge von classes_, und sie summieren sich zu 1. predict wählt den größten Wert aus.

Das Modell gibt also an, wie sicher es sich ist: 61 % Zitrone ist ein knappes Ergebnis und sollte noch einmal überprüft werden.

challenge icon

Aufgabe

Mittel

Eine Podcast-App ordnet neue Folgen den Kategorien Comedy, Nachrichten oder True Crime zu. Das Starterprojekt passt eine LogisticRegression auf episodes.csv an (Länge, Sprecher, Lacher pro Minute) und liest eine neue Folge in episode ein, eine Tabelle mit einer Zeile.

Vervollständige describe(episode):

  1. Gib die Wahrscheinlichkeit jedes Sendungstyps in der Reihenfolge von model.classes_ als ganze Prozentzahl aus.
  2. Gib den wahrscheinlichsten Typ zurück.

Für die Folge einer anderen App:

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

Probier es selbst

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


# Gibt für eine Episode die Wahrscheinlichkeit jedes Show-Typs aus (als Tabelle mit einer Zeile) und gibt dann den wahrscheinlichsten Typ zurück
def describe(episode):
    # Schreibe hier deinen Code
    return "unknown"


# Ändere die folgenden Zeilen nicht: eine neue Episode aus der Eingabe
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 dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Überwachtes Lernen

Übe selbstständig: Online-Python-Compiler