KI-Konzepte in Python

Grundlagen der Klassifikation: Softmax und k-nächste Nachbarn in Python

Klassifikation bedeutet, ein Label zu wählen, etwa Katze oder Hund. Ein Modell kann pro Klasse einen Score ausgeben und Softmax daraus Wahrscheinlichkeiten machen lassen, oder ein einfaches Verfahren wie k-nächste Nachbarn lässt die nächstgelegenen bekannten Beispiele abstimmen.

Das Konzept in einfachen Worten

Klassifikation bedeutet, ein Label zu wählen, etwa Katze oder Hund. Ein Modell kann pro Klasse einen Score ausgeben und Softmax daraus Wahrscheinlichkeiten machen lassen, oder ein einfaches Verfahren wie k-nächste Nachbarn lässt die nächstgelegenen bekannten Beispiele abstimmen.

Verwandle Scores mit Softmax in Klassenwahrscheinlichkeiten, bewerte sie mit Kreuzentropie und klassifiziere Punkte mit k-nächsten Nachbarn.

Die wichtigsten Ideen

  • Softmax behält die Reihenfolge der Scores bei und lässt sie sich zu 1 aufsummieren.
  • Die kategoriale Kreuzentropie bestraft selbstsichere falsche Antworten am stärksten.
  • k-NN hat keinen Trainingsschritt: Es vergleicht einen neuen Punkt mit den gespeicherten Beispielen.
  • Naive Bayes und Entscheidungsbäume (Gini-Unreinheit, Informationsgewinn) sind weitere klassische Klassifikatoren.

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 irgendwo ins linke Diagramm, um einen neuen Punkt per Abstimmung seiner k nächsten Nachbarn zu klassifizieren. Ändere rechts die Scores und beobachte Softmax.

Beispielcode

Code ausführen →
main.py
import math
from collections import Counter

# Softmax turns raw scores into probabilities that add up to 1.
def softmax(scores):
    exps = [math.exp(s - max(scores)) for s in scores]
    total = sum(exps)
    return [e / total for e in exps]

probs = softmax([2.0, 1.0, 0.1])
print("softmax:", [round(p, 3) for p in probs])
# Cross-entropy is small when the true class gets a high probability.
print("cross-entropy if class 0 is right:", round(-math.log(probs[0]), 3))

# k-nearest neighbours: label a point by a vote of the closest examples.
examples = [((1, 1), "cat"), ((1, 2), "cat"), ((5, 5), "dog"), ((6, 5), "dog"), ((5, 6), "dog")]
def knn(point, k=3):
    nearest = sorted(examples, key=lambda e: math.dist(point, e[0]))[:k]
    return Counter(label for _, label in nearest).most_common(1)[0][0]

print("(2, 1) ->", knn((2, 1)))
print("(5, 4) ->", knn((5, 4)))

Erwartete Ausgabe

softmax: [0.659, 0.242, 0.099]
cross-entropy if class 0 is right: 0.417
(2, 1) -> cat
(5, 4) -> dog

So funktioniert es

softmax() potenziert die Scores und teilt durch ihre Summe, sodass die drei Wahrscheinlichkeiten zusammen 1 ergeben; das vorherige Abziehen des Maximums verhindert einen Überlauf. Die Kreuzentropie ist −log der Wahrscheinlichkeit der richtigen Klasse. knn() sortiert die Beispiele nach Abstand und lässt die 3 nächsten abstimmen.

Ä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.

  1. Ändere Eingaben oder Gewichte und sage die Ausgabe vor dem Ausführen voraus.
  2. Gib die Zwischenwerte aus, um jeden Rechenschritt zu verfolgen.
  3. Löse die verlinkten Challenges unten, um die Idee selbst umzusetzen.
In der Python-IDE ausführen →

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.

Alle Challenges