Feature Agglomeration für hochdimensionale Daten

Beginner

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

Einführung

In diesem Tutorial wird gezeigt, wie Sie Feature Agglomeration verwenden, um ähnliche Features in einem Dataset zu vereinigen. Feature Agglomeration ist nützlich, wenn Sie mit hochdimensionalen Datasets arbeiten, indem Sie die Anzahl der Features reduzieren, während die wichtigsten Informationen beibehalten werden.

Tipps für die virtuelle Maschine

Nachdem der Start der virtuellen Maschine abgeschlossen ist, klicken Sie in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu öffnen.

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.

Bibliotheken importieren

In diesem Schritt werden wir die erforderlichen Bibliotheken importieren, um Feature Agglomeration durchzuführen.

import numpy as np
import matplotlib.pyplot as plt

from sklearn import datasets, cluster
from sklearn.feature_extraction.image import grid_to_graph

Dataset laden

In diesem Schritt werden wir das Digits-Dataset aus scikit-learn laden. Dieses Dataset enthält Bilder von handschriftlichen Ziffern von 0 bis 9.

digits = datasets.load_digits()
images = digits.images
X = np.reshape(images, (len(images), -1))

Verbindungsmatrix definieren

In diesem Schritt werden wir die Verbindungsmatrix mit der Funktion grid_to_graph aus scikit-learn definieren. Diese Funktion erstellt einen Verbindungsgraphen basierend auf dem Pixelgitter der Bilder.

connectivity = grid_to_graph(*images[0].shape)

Feature Agglomeration durchführen

In diesem Schritt werden wir Feature Agglomeration mit der Klasse FeatureAgglomeration aus scikit-learn durchführen. Wir werden die Anzahl der Cluster auf 32 setzen.

agglo = cluster.FeatureAgglomeration(connectivity=connectivity, n_clusters=32)
agglo.fit(X)
X_reduced = agglo.transform(X)

Inverse Transformation

In diesem Schritt werden wir eine inverse Transformation auf dem reduzierten Dataset durchführen, um die ursprüngliche Anzahl der Merkmale wiederherzustellen.

X_restored = agglo.inverse_transform(X_reduced)
images_restored = np.reshape(X_restored, images.shape)

Ergebnisse visualisieren

In diesem Schritt werden wir die ursprünglichen Bilder, die aggregierten Bilder und die Labels, die jeder Cluster zugewiesen wurden, visualisieren.

plt.figure(1, figsize=(4, 3.5))
plt.clf()
plt.subplots_adjust(left=0.01, right=0.99, bottom=0.01, top=0.91)
for i in range(4):
    plt.subplot(3, 4, i + 1)
    plt.imshow(images[i], cmap=plt.cm.gray, vmax=16, interpolation="nearest")
    plt.xticks(())
    plt.yticks(())
    if i == 1:
        plt.title("Originaldaten")
    plt.subplot(3, 4, 4 + i + 1)
    plt.imshow(images_restored[i], cmap=plt.cm.gray, vmax=16, interpolation="nearest")
    if i == 1:
        plt.title("Aggregierte Daten")
    plt.xticks(())
    plt.yticks(())

plt.subplot(3, 4, 10)
plt.imshow(
    np.reshape(agglo.labels_, images[0].shape),
    interpolation="nearest",
    cmap=plt.cm.nipy_spectral,
)
plt.xticks(())
plt.yticks(())
plt.title("Labels")
plt.show()

Zusammenfassung

In diesem Tutorial haben wir gelernt, wie wir Feature Agglomeration verwenden, um ähnliche Merkmale in einem Dataset zu vereinigen. Indem wir die Anzahl der Merkmale reduzieren, können wir die Leistung von Machine-Learning-Algorithmen verbessern, während wir die wichtigsten Informationen im Dataset beibehalten.