Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Externe Bewertung | Wie Wählt Man das Beste Modell Aus?
Clusteranalyse
course content

Kursinhalt

Clusteranalyse

Clusteranalyse

1. Was Ist Clustering?
2. Grundlegende Clustering-Algorithmen
3. Wie Wählt Man das Beste Modell Aus?

book
Externe Bewertung

Die externe Bewertung von Clustering-Algorithmen ist eine Methode zur Bewertung der Leistung eines Clustering-Algorithmus, indem seine Ergebnisse mit einem bekannten Satz von Klassenlabels oder Ground Truth verglichen werden. Mit anderen Worten, die Cluster des Algorithmus werden mit einem Satz von bereits bestehenden Labels verglichen, die von Experten erstellt oder auf Domänenwissen basieren.

Am häufigsten verwendete externe Metriken

Der Rand-Index (RI) misst die Ähnlichkeit zwischen zwei Clusterings oder Partitionen und wird häufig als externe Bewertungsmetrik im Clustering verwendet. Der Rand-Index misst den Prozentsatz der Datenpunktpaare, die in beiden, dem vorhergesagten und dem tatsächlichen Clustering, demselben Cluster zugewiesen sind, normalisiert durch die Gesamtzahl der Datenpunktpaare.

Der Rand-Index wird wie folgt berechnet:

  • Sei n die Gesamtzahl der Datenpunkte;
  • Sei a die Anzahl der Datenpunktpaare, die in beiden, dem vorhergesagten und dem tatsächlichen Clustering, demselben Cluster zugewiesen sind;
  • Sei b die Anzahl der Datenpunktpaare, die in beiden, dem vorhergesagten und dem tatsächlichen Clustering, verschiedenen Clustern zugewiesen sind.

Der Rand-Index wird dann durch 2*(a+b)/ (n*(n-1)) gegeben.

123456789101112131415161718192021222324252627282930313233
from sklearn.metrics import rand_score from sklearn.cluster import KMeans from sklearn.datasets import make_moons, make_blobs, make_circles import matplotlib.pyplot as plt import warnings warnings.filterwarnings('ignore') # Creating subplots for visualization fig, axes = plt.subplots(1, 3) fig.set_size_inches(10, 5) # Create circles dataset X_circles, y = make_circles(n_samples=500, factor=0.2) # Provide K-means clustering clustering = KMeans(n_clusters=2).fit(X_circles) predicted_circles = clustering.predict(X_circles) # Provide visualization and show RI for circles dataset axes[0].scatter(X_circles[:, 0], X_circles[:, 1], c=clustering.labels_, cmap='tab20b') axes[0].set_title('RI is: '+ str(round(rand_score(y, predicted_circles), 3))) X_blobs, y = make_blobs(n_samples=500, centers=2) clustering = KMeans(n_clusters=2).fit(X_blobs) predicted_blobs = clustering.predict(X_blobs) # Provide visualization and show RI for blobs dataset axes[1].scatter(X_blobs[:, 0], X_blobs[:, 1], c=clustering.labels_, cmap='tab20b') axes[1].set_title('RI is: '+ str(round(rand_score(y, predicted_blobs), 3))) X_moons, y = make_moons(n_samples=500) clustering = KMeans(n_clusters=2).fit(X_moons) predicted_moons = clustering.predict(X_moons) # Provide visualization and show RI for moons dataset axes[2].scatter(X_moons[:, 0], X_moons[:, 1], c=clustering.labels_, cmap='tab20b') axes[2].set_title('RI is: '+ str(round(rand_score(y, predicted_moons), 3)))
copy

Der Rand-Index kann zwischen 0 und 1 variieren, wobei 0 anzeigt, dass die beiden Clusterungen völlig unterschiedlich sind, und 1 anzeigt, dass die beiden Clusterungen identisch sind.


Mutual Information (MI) misst die Menge an Informationen, die von den vorhergesagten und den tatsächlichen Clusterungen basierend auf dem Konzept der Entropie geteilt werden. Wir werden nicht darauf eingehen, wie diese Metrik berechnet wird, da dies außerhalb des Rahmens des Anfängerkurses liegt.

1234567891011121314151617181920212223242526272829303132
from sklearn.metrics import mutual_info_score from sklearn.cluster import KMeans from sklearn.datasets import make_moons, make_blobs, make_circles import matplotlib.pyplot as plt import warnings warnings.filterwarnings('ignore') # Create subplots for visualizations fig, axes = plt.subplots(1, 3) fig.set_size_inches(10 ,5) X_circles, y = make_circles(n_samples=500, factor=0.2) clustering = KMeans(n_clusters=2).fit(X_circles) predicted_circles = clustering.predict(X_circles) # Provide visualization and show MI for circles dataset axes[0].scatter(X_circles[:, 0], X_circles[:, 1], c=clustering.labels_, cmap='tab20b') axes[0].set_title('MI is: '+ str(round(mutual_info_score(y, predicted_circles), 3))) X_blobs, y = make_blobs(n_samples=500, centers=2) clustering = KMeans(n_clusters=2).fit(X_blobs) predicted_blobs = clustering.predict(X_blobs) # Provide visualization and show MI for blobs dataset axes[1].scatter(X_blobs[:, 0], X_blobs[:, 1], c=clustering.labels_, cmap='tab20b') axes[1].set_title('MI is: '+ str(round(mutual_info_score(y, predicted_blobs), 3))) X_moons, y = make_moons(n_samples=500) clustering = KMeans(n_clusters=2).fit(X_moons) predicted_moons = clustering.predict(X_moons) # Provide visualization and show MI for moons dataset axes[2].scatter(X_moons[:, 0], X_moons[:, 1], c=clustering.labels_, cmap='tab20b') axes[2].set_title('MI is: '+ str(round(mutual_info_score(y, predicted_moons), 3)))
copy

Die Mutual Information variiert zwischen 0 und 1, wobei 0 anzeigt, dass die vorhergesagte Clusterung völlig unterschiedlich von der tatsächlichen Clusterung ist, und 1 anzeigt, dass die vorhergesagte Clusterung identisch mit der tatsächlichen Clusterung ist. Darüber hinaus können wir basierend auf den obigen Beispielen sagen, dass diese Metrik viel besser darin ist, schlechte Clusterungen zu erkennen als der Rand-Index.


Homogenität misst das Ausmaß, in dem jeder Cluster nur Datenpunkte enthält, die zu einer einzigen Klasse oder Kategorie basierend auf der bedingten Entropie gehören. Genau wie bei der Mutual Information werden wir das Prinzip der Berechnung dieser Metrik nicht betrachten.

12345678910111213141516171819202122232425262728293031
from sklearn.metrics import homogeneity_score from sklearn.cluster import KMeans from sklearn.datasets import make_moons, make_blobs, make_circles import matplotlib.pyplot as plt import warnings warnings.filterwarnings('ignore') fig, axes = plt.subplots(1, 3) fig.set_size_inches(10, 5) X_circles, y = make_circles(n_samples=500, factor=0.2) clustering = KMeans(n_clusters=2).fit(X_circles) predicted_circles = clustering.predict(X_circles) # Provide visualization and show homogeneity for circles dataset axes[0].scatter(X_circles[:, 0], X_circles[:, 1], c=clustering.labels_, cmap='tab20b') axes[0].set_title('Homogeneity is: '+ str(round(homogeneity_score(y, predicted_circles), 3))) X_blobs, y = make_blobs(n_samples=500, centers=2) clustering = KMeans(n_clusters=2).fit(X_blobs) predicted_blobs = clustering.predict(X_blobs) # Provide visualization and show homogeneity for blobs dataset axes[1].scatter(X_blobs[:, 0], X_blobs[:, 1], c=clustering.labels_, cmap='tab20b') axes[1].set_title('Homogeneity is: '+ str(round(homogeneity_score(y, predicted_blobs), 3))) X_moons, y = make_moons(n_samples=500) clustering = KMeans(n_clusters=2).fit(X_moons) predicted_moons = clustering.predict(X_moons) # Provide visualization and show homogeneity for moons dataset axes[2].scatter(X_moons[:, 0], X_moons[:, 1], c=clustering.labels_, cmap='tab20b') axes[2].set_title('Homogeneity is: '+ str(round(homogeneity_score(y, predicted_moons), 3)))
copy

Eine Clusterlösung wird als hoch homogen angesehen, wenn alle Datenpunkte, die zur gleichen wahren Klasse oder Kategorie gehören, in denselben Cluster gruppiert werden.
Mit anderen Worten, Homogenität misst das Ausmaß, in dem ein Clustering-Algorithmus Datenpunkte den richtigen Clustern basierend auf ihrer wahren Klasse oder Kategorie zuweist. Der Homogenitätswert reicht von 0 bis 1, wobei 1 perfekte Homogenität anzeigt.

Homogenität ist die beste aller betrachteten Metriken: Sie bestimmt sowohl gutes als auch schlechtes Clustering gleichermaßen gut, wie im obigen Beispiel gezeigt.

Können wir externe Bewertungsmetriken verwenden, wenn wir keine Informationen über die tatsächliche Aufteilung der Daten in Cluster haben?

Können wir externe Bewertungsmetriken verwenden, wenn wir keine Informationen über die tatsächliche Aufteilung der Daten in Cluster haben?

Wählen Sie die richtige Antwort aus

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 3. Kapitel 2
We're sorry to hear that something went wrong. What happened?
some-alt