Heim > Technologie-Peripheriegeräte > KI > Ensemble-Methoden für unbeaufsichtigtes Lernen: Clustering von Ähnlichkeitsmatrizen

Ensemble-Methoden für unbeaufsichtigtes Lernen: Clustering von Ähnlichkeitsmatrizen

PHPz
Freigeben: 2023-11-13 17:53:06
nach vorne
571 Leute haben es durchsucht

Beim maschinellen Lernen bezieht sich der Begriff „Ensemble“ auf die parallele Kombination mehrerer Modelle. Die Idee besteht darin, die Weisheit der Masse zu nutzen, um einen besseren Konsens über die endgültige Antwort zu erzielen.

Ensemble-Methoden für unbeaufsichtigtes Lernen: Clustering von Ähnlichkeitsmatrizen

Im Bereich des überwachten Lernens wurde diese Methode umfassend untersucht und angewendet, insbesondere bei Klassifizierungsproblemen mit sehr erfolgreichen Algorithmen wie RandomForest. Oft wird ein Abstimmungs-/Gewichtungssystem eingesetzt, um die Ausgabe jedes einzelnen Modells zu einer robusteren und konsistenteren Endausgabe zu kombinieren.

In der Welt des unbeaufsichtigten Lernens wird diese Aufgabe schwieriger. Da es sich erstens um die Herausforderungen des Fachgebiets selbst handelt, haben wir keine Vorkenntnisse über die Daten, um uns mit irgendeinem Ziel zu vergleichen. Zweitens, weil es immer noch ein Problem ist, eine geeignete Möglichkeit zu finden, Informationen aus allen Modellen zu kombinieren, und es keinen Konsens darüber gibt, wie dies zu bewerkstelligen ist.

In diesem Artikel diskutieren wir den besten Ansatz zu diesem Thema, nämlich die Clusterung von Ähnlichkeitsmatrizen.

Ensemble-Methoden für unbeaufsichtigtes Lernen: Clustering von Ähnlichkeitsmatrizen

Die Hauptidee dieser Methode ist: Erstellen Sie bei einem gegebenen Datensatz X eine Matrix S, sodass Si die Ähnlichkeit zwischen xi und xj darstellt. Diese Matrix wird basierend auf den Clustering-Ergebnissen mehrerer verschiedener Modelle erstellt.

Binäre Kookkurrenzmatrix

Das Erstellen einer binären Kookkurrenzmatrix zwischen Eingaben ist der erste Schritt beim Erstellen eines Modells

Ensemble-Methoden für unbeaufsichtigtes Lernen: Clustering von Ähnlichkeitsmatrizen

Sie wird verwendet, um anzuzeigen, ob zwei Eingaben i und j zum selben Cluster gehören.

 import numpy as np from scipy import sparse  def build_binary_matrix( clabels ): data_len = len(clabels) matrix=np.zeros((data_len,data_len))for i in range(data_len):matrix[i,:] = clabels == clabels[i]return matrix  labels = np.array( [1,1,1,2,3,3,2,4] ) build_binary_matrix(labels)
Nach dem Login kopieren

Ensemble-Methoden für unbeaufsichtigtes Lernen: Clustering von Ähnlichkeitsmatrizen

Verwenden Sie KMeans, um eine Ähnlichkeitsmatrix zu erstellen

Wir haben eine Funktion zum Binarisieren unserer Cluster erstellt und können nun mit der Erstellung der Ähnlichkeitsmatrix beginnen.

Wir stellen hier eine gängige Methode vor, bei der nur der Durchschnitt zwischen M Matrizen zum gleichzeitigen Auftreten berechnet wird, die von M verschiedenen Modellen generiert werden. Wir definieren es wie folgt:

Ensemble-Methoden für unbeaufsichtigtes Lernen: Clustering von Ähnlichkeitsmatrizen

Wenn Elemente in denselben Cluster fallen, liegt ihr Ähnlichkeitswert nahe bei 1, und wenn Elemente in verschiedene Gruppen fallen, liegt ihr Ähnlichkeitswert nahe bei 0

Wir werden eine Ähnlichkeit aufbauen Matrix basierend auf den vom K-Means-Modell erstellten Beschriftungen. Durchgeführt unter Verwendung des MNIST-Datensatzes. Der Einfachheit und Effizienz halber werden wir nur 10.000 PCA-reduzierte Bilder verwenden.

 from sklearn.datasets import fetch_openml from sklearn.decomposition import PCA from sklearn.cluster import MiniBatchKMeans, KMeans from sklearn.model_selection import train_test_split  mnist = fetch_openml('mnist_784') X = mnist.data y = mnist.target  X, _, y, _ = train_test_split(X,y, train_size=10000, stratify=y, random_state=42 )  pca = PCA(n_components=0.99) X_pca = pca.fit_transform(X)
Nach dem Login kopieren

Um Vielfalt zwischen den Modellen zu ermöglichen, wird jedes Modell mit einer zufälligen Anzahl von Clustern instanziiert.

 NUM_MODELS = 500 MIN_N_CLUSTERS = 2 MAX_N_CLUSTERS = 300  np.random.seed(214) model_sizes = np.random.randint(MIN_N_CLUSTERS, MAX_N_CLUSTERS+1, size=NUM_MODELS) clt_models = [KMeans(n_clusters=i, n_init=4, random_state=214) for i in model_sizes]  for i, model in enumerate(clt_models):print( f"Fitting - {i+1}/{NUM_MODELS}" )model.fit(X_pca)
Nach dem Login kopieren

Die folgende Funktion dient zum Erstellen einer Ähnlichkeitsmatrix

def build_similarity_matrix( models_labels ):n_runs, n_data = models_labels.shape[0], models_labels.shape[1] sim_matrix = np.zeros( (n_data, n_data) ) for i in range(n_runs):sim_matrix += build_binary_matrix( models_labels[i,:] ) sim_matrix = sim_matrix/n_runs return sim_matrix
Nach dem Login kopieren

Rufen Sie diese Funktion auf:

 models_labels = np.array([ model.labels_ for model in clt_models ]) sim_matrix = build_similarity_matrix(models_labels)
Nach dem Login kopieren

Das Endergebnis ist wie folgt:

Ensemble-Methoden für unbeaufsichtigtes Lernen: Clustering von Ähnlichkeitsmatrizen

Die Informationen aus der Ähnlichkeitsmatrix können vor dem letzten Schritt noch nachbearbeitet werden , wie z. B. das Anwenden von Logarithmen und Polynomen. Warten Sie auf die Transformation.

In unserem Fall behalten wir die ursprüngliche Bedeutung bei und schreiben sie neu

Pos_sim_matrix = sim_matrix
Nach dem Login kopieren

Clustering der Ähnlichkeitsmatrix

Die Ähnlichkeitsmatrix ist eine Möglichkeit, das durch die Zusammenarbeit aller Clustering-Modelle aufgebaute Wissen darzustellen.

Wir können damit visuell erkennen, welche Einträge mit größerer Wahrscheinlichkeit zum selben Cluster gehören und welche nicht. Allerdings müssen diese Informationen noch in tatsächliche Cluster umgewandelt werden

Dies geschieht durch die Verwendung eines Clustering-Algorithmus, der eine Ähnlichkeitsmatrix als Parameter erhalten kann. Hier verwenden wir SpectralClustering.

 from sklearn.cluster import SpectralClustering spec_clt = SpectralClustering(n_clusters=10, affinity='precomputed',n_init=5, random_state=214) final_labels = spec_clt.fit_predict(pos_sim_matrix)
Nach dem Login kopieren

Vergleich mit dem Standardmodell von KMeans

Vergleichen wir es mit KMeans, um zu bestätigen, ob unsere Methode effektiv ist.

Wir werden NMI-, ARI-, Cluster-Reinheits- und Klassenreinheitsindikatoren verwenden, um das Standard-KMeans-Modell zu bewerten und mit unserem Ensemble-Modell zu vergleichen. Darüber hinaus zeichnen wir die Kontingenzmatrix auf, um zu visualisieren, welche Kategorien zu den einzelnen Clustern gehören

from seaborn import heatmap import matplotlib.pyplot as plt  def data_contingency_matrix(true_labels, pred_labels): fig, (ax) = plt.subplots(1, 1, figsize=(8,8)) n_clusters = len(np.unique(pred_labels))n_classes = len(np.unique(true_labels))label_names = np.unique(true_labels)label_names.sort() contingency_matrix = np.zeros( (n_classes, n_clusters) ) for i, true_label in enumerate(label_names):for j in range(n_clusters):contingency_matrix[i, j] = np.sum(np.logical_and(pred_labels==j, true_labels==true_label)) heatmap(contingency_matrix.astype(int), ax=ax,annot=True, annot_kws={"fontsize":14}, fmt='d') ax.set_xlabel("Clusters", fontsize=18)ax.set_xticks( [i+0.5 for i in range(n_clusters)] )ax.set_xticklabels([i for i in range(n_clusters)], fontsize=14) ax.set_ylabel("Original classes", fontsize=18)ax.set_yticks( [i+0.5 for i in range(n_classes)] )ax.set_yticklabels(label_names, fontsize=14, va="center") ax.set_title("Contingency Matrix\n", ha='center', fontsize=20)
Nach dem Login kopieren

Ensemble-Methoden für unbeaufsichtigtes Lernen: Clustering von Ähnlichkeitsmatrizen

from sklearn.metrics import normalized_mutual_info_score, adjusted_rand_score  def purity( true_labels, pred_labels ): n_clusters = len(np.unique(pred_labels))n_classes = len(np.unique(true_labels))label_names = np.unique(true_labels) purity_vector = np.zeros( (n_classes) )contingency_matrix = np.zeros( (n_classes, n_clusters) ) for i, true_label in enumerate(label_names):for j in range(n_clusters):contingency_matrix[i, j] = np.sum(np.logical_and(pred_labels==j, true_labels==true_label)) purity_vector = np.max(contingency_matrix, axis=1)/np.sum(contingency_matrix, axis=1) print( f"Mean Class Purity - {np.mean(purity_vector):.2f}" ) for i, true_label in enumerate(label_names):print( f" {true_label} - {purity_vector[i]:.2f}" )   cluster_purity_vector = np.zeros( (n_clusters) )cluster_purity_vector = np.max(contingency_matrix, axis=0)/np.sum(contingency_matrix, axis=0) print( f"Mean Cluster Purity - {np.mean(cluster_purity_vector):.2f}" ) for i in range(n_clusters):print( f" {i} - {cluster_purity_vector[i]:.2f}" )   kmeans_model = KMeans(10, n_init=50, random_state=214) km_labels = kmeans_model.fit_predict(X_pca)  data_contingency_matrix(y, km_labels)  print( "Single KMeans NMI - ", normalized_mutual_info_score(y, km_labels) ) print( "Single KMeans ARI - ", adjusted_rand_score(y, km_labels) ) purity(y, km_labels)
Nach dem Login kopieren

Ensemble-Methoden für unbeaufsichtigtes Lernen: Clustering von Ähnlichkeitsmatrizen

 data_contingency_matrix(y, final_labels)  print( "Ensamble NMI - ", normalized_mutual_info_score(y, final_labels) ) print( "Ensamble ARI - ", adjusted_rand_score(y, final_labels) ) purity(y, final_labels)
Nach dem Login kopieren

Ensemble-Methoden für unbeaufsichtigtes Lernen: Clustering von Ähnlichkeitsmatrizen

Ensemble-Methoden für unbeaufsichtigtes Lernen: Clustering von Ähnlichkeitsmatrizen

Anhand der oben genannten Werte ist deutlich zu erkennen, dass die Ensemble-Methode die Qualität des Clusterings effektiv verbessern kann. Gleichzeitig ist auch ein konsistenteres Verhalten in der Kontingenzmatrix zu beobachten, mit besseren Verteilungskategorien und weniger „Rauschen“

Das obige ist der detaillierte Inhalt vonEnsemble-Methoden für unbeaufsichtigtes Lernen: Clustering von Ähnlichkeitsmatrizen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:51cto.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage