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:
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.
Aufgabe
MittelEine 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):
- Gib die Wahrscheinlichkeit jedes Sendungstyps in der Reihenfolge von
model.classes_als ganze Prozentzahl aus. - Gib den wahrscheinlichsten Typ zurück.
Für die Folge einer anderen App:
comedy: 12%
news: 70%
true crime: 18%
Best guess: newsProbier 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}")
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Überwachtes Lernen
1Dein erstes Modell
Aus Beispielen lernenTrainings- und TestdatensätzeAnpassen und VorhersagenEin Modell bewertenRückblick: Saatgutsortierer4Logistische Regression
Ja-Nein-VorhersagenDie EntscheidungsschwelleGewichte als IndizienMehrere KlassenRückblick: Spamfilter2Nächste Nachbarn
So entscheidet k-NNk wählenEntscheidungsgrenzenSkalierung für NachbarnRückblick: Wein-Nachbarn5Klassifikatoren bewerten
Die KonfusionsmatrixPräzision und TrefferquoteDer F1-ScoreUnausgewogene KlassenROC-KurvenRückblick: Screeningtest3Lineare Regression
Zahlen vorhersagenMehrere MerkmaleFehler messenResiduenplotsZusammenfassung: Fahrradverleih6Entscheidungsbäume
Bäume stellen FragenEinen Baum lesenBaumtiefeMerkmalswichtigkeitRückblick: Kreditentscheidungen9Ensembleverfahren
Random ForestsWarum Random Forests funktionierenGradient BoostingRückblick: Förster des Waldes12Abschließende Herausforderungen
Diabetes-FortschrittKreditgenehmigungHandgeschriebene ZiffernKundenabwanderungÜbe selbstständig: Online-Python-Compiler