Vektorisierung mit KBinsDiscretizer

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 wird gezeigt, wie man KBinsDiscretizer aus der Scikit-learn-Bibliothek verwendet, um die Vektorisierung auf einem Beispielbild eines Waschbärengesichts durchzuführen. Die Vektorisierung ist eine Technik, um die Anzahl der Graustufen zu reduzieren, die zum Darstellen eines Bildes verwendet werden. Wir werden KBinsDiscretizer verwenden, um die Vektorisierung auf dem Waschbärenbild durchzuführen. Wir werden 8 Graustufen verwenden, um das Bild zu repräsentieren, was auf nur 3 Bits pro Pixel komprimiert werden kann. Wir werden die einheitlichen und k-Means-Clustering-Strategien vergleichen, um die Pixelwerte auf die 8 Graustufen zuzuordnen.

Tipps für die VM

Nachdem die VM gestartet 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.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn(("Sklearn")) -.-> sklearn/DataPreprocessingandFeatureEngineeringGroup(["Data Preprocessing and Feature Engineering"]) sklearn/DataPreprocessingandFeatureEngineeringGroup -.-> sklearn/preprocessing("Preprocessing and Normalization") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/preprocessing -.-> lab-49122{{"Vektorisierung mit KBinsDiscretizer"}} ml/sklearn -.-> lab-49122{{"Vektorisierung mit KBinsDiscretizer"}} end

Originalbild laden und anzeigen

Wir beginnen mit dem Laden des Waschbärenbildes aus Scipy. Wir werden das Bild anzeigen und seine Form, den Datentyp und den Arbeitsspeicherbedarf überprüfen.

from scipy.misc import face
import matplotlib.pyplot as plt

raccoon_face = face(gray=True)

print(f"Die Dimension des Bildes ist {raccoon_face.shape}")
print(f"Die Daten, die zum Codieren des Bildes verwendet werden, sind vom Typ {raccoon_face.dtype}")
print(f"Die Anzahl der in RAM verwendeten Bytes beträgt {raccoon_face.nbytes}")

fig, ax = plt.subplots(ncols=2, figsize=(12, 4))
ax[0].imshow(raccoon_face, cmap=plt.cm.gray)
ax[0].axis("off")
ax[0].set_title("Originalbild")
ax[1].hist(raccoon_face.ravel(), bins=256)
ax[1].set_xlabel("Pixelwert")
ax[1].set_ylabel("Anzahl der Pixel")
ax[1].set_title("Verteilung der Pixelwerte")
_ = fig.suptitle("Originalbild eines Waschbärenengesichts")

Vektorisierung mit KBinsDiscretizer

Wir werden nun KBinsDiscretizer verwenden, um die Vektorisierung auf dem Waschbärenbild durchzuführen. Wir werden 8 Graustufen verwenden, um das Bild zu repräsentieren, was auf nur 3 Bits pro Pixel komprimiert werden kann. Wir werden die einheitlichen und k-Means-Clustering-Strategien verwenden, um die Pixelwerte auf die 8 Graustufen zuzuordnen.

Einheitliche Stichprobenstrategie

Wir werden zunächst die einheitliche Stichprobenstrategie verwenden, um die Pixelwerte auf die 8 Graustufen zuzuordnen.

from sklearn.preprocessing import KBinsDiscretizer

n_bins = 8
encoder = KBinsDiscretizer(
    n_bins=n_bins, encode="ordinal", strategy="uniform", random_state=0
)
compressed_raccoon_uniform = encoder.fit_transform(raccoon_face.reshape(-1, 1)).reshape(
    raccoon_face.shape
)

fig, ax = plt.subplots(ncols=2, figsize=(12, 4))
ax[0].imshow(compressed_raccoon_uniform, cmap=plt.cm.gray)
ax[0].axis("off")
ax[0].set_title("Einheitliche Stichprobe")
ax[1].hist(compressed_raccoon_uniform.ravel(), bins=256)
ax[1].set_xlabel("Pixelwert")
ax[1].set_ylabel("Anzahl der Pixel")
ax[1].set_title("Verteilung der Pixelwerte")
_ = fig.suptitle("Waschbärenbild, komprimiert mit 3 Bits und einer einheitlichen Strategie")
K-Means-Clustering-Strategie

Wir werden nun die k-Means-Clustering-Strategie verwenden, um die Pixelwerte auf die 8 Graustufen zuzuordnen.

encoder = KBinsDiscretizer(
    n_bins=n_bins, encode="ordinal", strategy="kmeans", random_state=0
)
compressed_raccoon_kmeans = encoder.fit_transform(raccoon_face.reshape(-1, 1)).reshape(
    raccoon_face.shape
)

fig, ax = plt.subplots(ncols=2, figsize=(12, 4))
ax[0].imshow(compressed_raccoon_kmeans, cmap=plt.cm.gray)
ax[0].axis("off")
ax[0].set_title("K-Means-Clustering")
ax[1].hist(compressed_raccoon_kmeans.ravel(), bins=256)
ax[1].set_xlabel("Pixelwert")
ax[1].set_ylabel("Anzahl der Pixel")
ax[1].set_title("Verteilung der Pixelwerte")
_ = fig.suptitle("Waschbärenbild, komprimiert mit 3 Bits und einer K-Means-Strategie")

Arbeitsspeicherbedarf

Wir werden nun den Arbeitsspeicherbedarf der komprimierten Bilder überprüfen. Wir erwarten, dass das komprimierte Bild 8-mal weniger Arbeitsspeicher benötigt als das Originalbild.

print(f"Die Anzahl der in RAM verwendeten Bytes beträgt {compressed_raccoon_kmeans.nbytes}")
print(f"Kompressionsverhältnis: {compressed_raccoon_kmeans.nbytes / raccoon_face.nbytes}")

Zusammenfassung

In diesem Lab haben wir KBinsDiscretizer aus der Scikit-learn-Bibliothek verwendet, um die Vektorisierung auf einem Beispielbild eines Waschbärenengesichts durchzuführen. Wir haben 8 Graustufen verwendet, um das Bild zu repräsentieren, was auf nur 3 Bits pro Pixel komprimiert werden kann. Wir haben die einheitlichen und k-Means-Clustering-Strategien verglichen, um die Pixelwerte auf die 8 Graustufen zuzuordnen. Wir haben festgestellt, dass die k-Means-Clustering-Strategie eine ausgewogenerere Verteilung der Pixelwerte liefert. Wir haben auch den Arbeitsspeicherbedarf der komprimierten Bilder überprüft und festgestellt, dass das komprimierte Bild aufgrund der Verwendung einer 64-Bit-Float-Darstellung für das komprimierte Bild 8-mal mehr Arbeitsspeicher benötigt als das Originalbild.

Zusammenfassung

Herzlichen Glückwunsch! Sie haben das Lab zu Vektorisierung mit KBinsDiscretizer abgeschlossen. Sie können in LabEx weitere Labs ausprobieren, um Ihre Fähigkeiten zu verbessern.