Lineare und logistische Regression in Python
Regression ist die einfachste Form des maschinellen Lernens. Lineare Regression sagt eine Zahl mit einer Geraden voraus; logistische Regression schickt diese Gerade durch eine Sigmoid-Funktion, um die Wahrscheinlichkeit einer Ja/Nein-Antwort vorherzusagen.
Das Konzept in einfachen Worten
Regression ist die einfachste Form des maschinellen Lernens. Lineare Regression sagt eine Zahl mit einer Geraden voraus; logistische Regression schickt diese Gerade durch eine Sigmoid-Funktion, um die Wahrscheinlichkeit einer Ja/Nein-Antwort vorherzusagen.
Passe mit der Methode der kleinsten Quadrate eine Gerade an und verwandle dann mit logistischer Regression einen Score in eine Wahrscheinlichkeit.
Die wichtigsten Ideen
- Lineare Regression sagt stetige Werte wie Preise oder Temperaturen voraus.
- Logistische Regression sagt eine Wahrscheinlichkeit für zwei Klassen voraus.
- Beide lassen sich statt mit einer geschlossenen Formel auch mit Gradientenabstieg trainieren.
- Ein Perzeptron ist ein verwandter Klassifikator, der seine Gewichte nur bei einem Fehler anpasst.
Wann wird dieser Ansatz verwendet?
- Verstehen, was in neuronalen Netzen und KI-Bibliotheken passiert.
- Die Idee lernen, bevor du sie in den passenden Challenges umsetzt.
- Dich auf Kurse zu maschinellem Lernen, Vorstellungsgespräche und Projekte vorbereiten.
Selbst ausprobieren
Klicke in das linke Diagramm, um Punkte hinzuzufügen, und sieh, wie sich die beste Gerade anpasst. Rechts verschiebst du mit w und b die Entscheidungsgrenze.
Beispielcode
import math
# Linear regression: find the line that best fits the points (least squares).
xs = [1, 2, 3, 4, 5]
ys = [2.1, 3.9, 6.2, 8.1, 9.8]
mean_x, mean_y = sum(xs) / len(xs), sum(ys) / len(ys)
slope = sum((x - mean_x) * (y - mean_y) for x, y in zip(xs, ys)) / sum((x - mean_x) ** 2 for x in xs)
intercept = mean_y - slope * mean_x
print(f"line: y = {slope:.2f}x + {intercept:.2f}")
print("predict x=6:", round(slope * 6 + intercept, 2))
# Logistic regression turns a score into a probability with the sigmoid.
def predict_pass(hours_studied, weight=1.5, bias=-4.0):
return 1 / (1 + math.exp(-(weight * hours_studied + bias)))
for hours in (1, 3, 5):
p = predict_pass(hours)
print(f"{hours} hours -> pass probability {p:.2f} -> {'pass' if p >= 0.5 else 'fail'}")
Erwartete Ausgabe
line: y = 1.96x + 0.14
predict x=6: 11.9
1 hours -> pass probability 0.08 -> fail
3 hours -> pass probability 0.62 -> pass
5 hours -> pass probability 0.97 -> pass
So funktioniert es
Die Formel der kleinsten Quadrate findet Steigung und Achsenabschnitt, bei denen die quadrierten Abstände zu den Punkten am kleinsten sind, und liefert y = 1.96x + 0.14. predict_pass() berechnet aus den Lernstunden einen Score, den Sigmoid in eine Wahrscheinlichkeit umwandelt; 0.5 ist die Grenze zwischen nicht bestanden und bestanden.
Ändere die Werte und führe das Programm im CodeUtility Python Online-Compiler aus, ohne Python lokal zu installieren.
Übungsaufgaben
Verändere Eingaben und Randfälle, bevor du die Lösung mit größeren Datenmengen testest.
- Ändere Eingaben oder Gewichte und sage die Ausgabe vor dem Ausführen voraus.
- Gib die Zwischenwerte aus, um jeden Rechenschritt zu verfolgen.
- Löse die verlinkten Challenges unten, um die Idee selbst umzusetzen.
Mit einer Challenge üben
Nutze den Inhalt dieser Lektion, um ein echtes Problem zu lösen. Jede Challenge läuft im Browser, mit sofortigen Tests und einem KI-Review.
- Einfache lineare Regression (kleinste Quadrate) Lege mit den Formeln der kleinsten Quadrate die bestpassende Gerade durch Datenpunkte. Mittel
- Lineare Regression mit Gradientenabstieg Lerne Steigung und Achsenabschnitt einer Geraden, indem du schrittweise den mittleren quadratischen Fehler hinabsteigst. Mittel
- Vorhersage mit logistischer Regression Klassifiziere Beispiele als 0 oder 1, indem du eine gewichtete Summe durch Sigmoid leitest und mit einem Schwellenwert vergleichst. Einfach
- Perzeptron-Lernalgorithmus Trainiere das ursprüngliche Perzeptron, das seine Gewichte nur bei Fehlern anpasst. Mittel