Affinitätsfortpflanzungsklustering

Machine LearningMachine LearningBeginner
Jetzt üben

This tutorial is from open-source community. Access the source code

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab werden wir lernen, wie man den Affinity Propagation-Algorithmus verwendet, um eine Clusteranalyse auf einem Datensatz durchzuführen. Der Affinity Propagation-Algorithmus ist ein Clusteralgorithmus, der nicht voraussetzt, dass die Anzahl der Cluster vorgegeben ist, und der in der Lage ist, die Anzahl der Cluster automatisch basierend auf den Eingabedaten zu bestimmen.

Tipps für die VM

Nachdem der VM-Start abgeschlossen ist, klicken Sie in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu nutzen.

Manchmal müssen Sie einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund von Einschränkungen in Jupyter Notebook nicht automatisiert werden.

Wenn Sie bei der Lernphase Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback, und wir werden das Problem für Sie prompt beheben.

Importieren der erforderlichen Bibliotheken

Wir beginnen mit dem Importieren der erforderlichen Bibliotheken, um die Clusteranalyse durchzuführen und Beispiel-Daten zu generieren.

import numpy as np
from sklearn.cluster import AffinityPropagation
from sklearn import metrics
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt

Generieren von Beispiel-Daten

Wir werden ein Beispiel-Datensatz mit der Funktion make_blobs aus dem Modul sklearn.datasets generieren. Die Funktion make_blobs erzeugt einen Datensatz von Punkten im n-dimensionalen Raum, wobei jeder Punkt zu einem der k Cluster gehört. Wir werden einen Datensatz mit 300 Punkten im 2-dimensionalen Raum generieren, mit 3 Clustern und einer Standardabweichung von 0,5.

centers = [[1, 1], [-1, -1], [1, -1]]
X, labels_true = make_blobs(
    n_samples=300, centers=centers, cluster_std=0.5, random_state=0
)

Berechnung der Affinitätsfortpflanzung

Wir werden die Klasse AffinityPropagation aus dem Modul sklearn.cluster verwenden, um die Clusteranalyse auf dem Datensatz durchzuführen. Wir werden den Parameter preference auf -50 setzen, der die Anzahl der zu erzeugenden Cluster steuert. Ein niedrigerer Wert von preference führt zu mehr erzeugten Clustern. Anschließend werden wir einige Metriken ausgeben, um die Qualität der Clusterbildung zu bewerten.

af = AffinityPropagation(preference=-50, random_state=0).fit(X)
cluster_centers_indices = af.cluster_centers_indices_
labels = af.labels_

n_clusters_ = len(cluster_centers_indices)

print("Geschätzte Anzahl der Cluster: %d" % n_clusters_)
print("Homogenität: %0.3f" % metrics.homogeneity_score(labels_true, labels))
print("Vollständigkeit: %0.3f" % metrics.completeness_score(labels_true, labels))
print("V-Maß: %0.3f" % metrics.v_measure_score(labels_true, labels))
print("Angepasster Rand-Index: %0.3f" % metrics.adjusted_rand_score(labels_true, labels))
print(
    "Angepasste gegenseitige Information: %0.3f"
    % metrics.adjusted_mutual_info_score(labels_true, labels)
)
print(
    "Silhouettenkoeffizient: %0.3f"
    % metrics.silhouette_score(X, labels, metric="sqeuclidean")
)

Zeichnen des Ergebnisses

Wir werden die resultierenden Cluster mit der Bibliothek matplotlib zeichnen. Wir werden durch jeden Cluster iterieren und die zu diesem Cluster gehörenden Punkte zeichnen, zusammen mit dem Clusterzentrum und den Linien, die das Zentrum mit jedem Punkt im Cluster verbinden.

plt.close("all")
plt.figure(1)
plt.clf()

colors = plt.cycler("color", plt.cm.viridis(np.linspace(0, 1, 4)))

for k, col in zip(range(n_clusters_), colors):
    class_members = labels == k
    cluster_center = X[cluster_centers_indices[k]]
    plt.scatter(
        X[class_members, 0], X[class_members, 1], color=col["color"], marker="."
    )
    plt.scatter(
        cluster_center[0], cluster_center[1], s=14, color=col["color"], marker="o"
    )
    for x in X[class_members]:
        plt.plot(
            [cluster_center[0], x[0]], [cluster_center[1], x[1]], color=col["color"]
        )

plt.title("Geschätzte Anzahl der Cluster: %d" % n_clusters_)
plt.show()

Zusammenfassung

In diesem Lab haben wir gelernt, wie man den Affinitätsfortpflanzungsalgorithmus verwendet, um eine Clusteranalyse auf einem Datensatz durchzuführen. Wir haben einen Beispiel-Datensatz generiert, die Clusteranalyse mit dem Affinitätsfortpflanzungsalgorithmus durchgeführt und die resultierenden Cluster geplottet. Wir haben auch die Qualität der Clusterbildung mit verschiedenen Metriken bewertet.