Eine sanfte Einführung in die Hauptkomponentenanalyse (PCA) in Python
Bild von Autor | Ideogramm

Hauptkomponentenanalyse (PCA) ist eine der beliebtesten Techniken zur Reduzierung der Dimensionalität hochdimensionaler Daten. Dies ist ein wichtiger Datentransformationsprozess in verschiedenen realen Szenarien und Branchen wie Bildverarbeitung, Finanzen, Genetik und Anwendungen für maschinelles Lernen, in denen Daten viele Merkmale enthalten, die effizienter analysiert werden müssen.

Die Gründe für die Bedeutung von Dimensionalitätsreduktionstechniken wie PCA sind vielfältig, wobei drei von ihnen hervorgehen:

  • Effizienz: Durch die Reduzierung der Anzahl der Merkmale in Ihren Daten bedeutet eine Reduzierung der Rechenkosten datenintensiver Prozesse wie dem Coaching fortgeschrittener maschineller Lernmodelle.
  • Interpretierbarkeit: Indem Sie Ihre Daten in einen niedrigdimensionalen Raum projizieren und gleichzeitig ihre wichtigsten Muster und Eigenschaften aufbewahren, ist es einfacher, in 2D und 3D zu interpretieren und zu visualisieren, was manchmal dazu beiträgt, Einblicke aus der Visualisierung zu gewinnen.
  • Geräuschreduzierung: Oft können hochdimensionale Daten redundante oder verrückte Merkmale enthalten, die, wenn sie mit Methoden wie PCA erkannt werden, eliminiert werden können, während die Wirksamkeit nachfolgender Analysen erhalten bleibt (oder sogar verbessert).

Hoffentlich habe ich Sie zu diesem Zeitpunkt von der praktischen Relevanz von PCA beim Umgang mit komplexen Daten überzeugt. Wenn dies der Fall ist, lesen Sie weiter, da wir praktisch werden, indem wir lernen, wie PCA in Python verwendet wird.

So wenden Sie die Hauptkomponentenanalyse in Python an

Dank der unterstützenden Bibliotheken wie Scikit-Study, die abstrahierte Implementierungen des PCA-Algorithmus enthalten, ist die Verwendung dieser Daten in Ihren Daten relativ einfach, solange die Daten numerisch, zuvor vorgezogen und frei von fehlenden Werten sind, wobei Characteristic-Werte standardisiert sind, um Probleme wie Varianzdominanz zu vermeiden. Dies ist besonders wichtig, da PCA eine zutiefst statistische Methode ist, die sich auf die Bestimmung von Merkmalsvarianzen stützt Hauptkomponenten: Neue Merkmale, die aus den Unique- und orthogonalen Merkmalen zueinander abgeleitet sind.

Wir werden unser Beispiel für die Verwendung von PCA in Python starten, indem wir die erforderlichen Bibliotheken importieren, den MNIST-Datensatz von Bildern mit niedriger Auflösung von handgeschriebenen Ziffern geladen und in einen Pandas-Datenfream einfügen:

import pandas as pd
from torchvision import datasets

mnist_data = datasets.MNIST(root="./information", practice=True, obtain=True)
information = ()
for img, label in mnist_data:
    img_array = checklist(img.getdata()) 
    information.append((label) + img_array)
columns = ("label") + (f"pixel_{i}" for i in vary(28*28))
mnist_data = pd.DataFrame(information, columns=columns)

Im MNIST -DatensatzJede Instanz ist ein 28×28 Quadratbild mit insgesamt 784 Pixel, die jeweils einen numerischen Code enthalten, der mit seinem Graustufe verbunden ist und von 0 für Schwarz (keine Intensität) bis 255 für Weiß (maximale Intensität) reicht. Diese Daten müssen zunächst in ein eindimensionales Array umordnet werden – und nicht nach seiner ursprünglichen 28×28 -Gitteranordnung. Dieser Vorgang, der als Abflachung bezeichnet wird, findet im obigen Code statt, wobei der endgültige Datensatz im DataFrame -Format insgesamt 785 Variablen enthält: eine für jedes der 784 Pixel plus das Etikett, was mit einem Ganzzahlwert zwischen 0 und 9 die ursprünglich im Bild geschriebene Ziffer anzeigt.

MNIST -Datensatz | Quelle: Tensorflow
MNIST -Datensatz | Quelle: Tensorflow

In diesem Beispiel müssen wir das Etikett nicht benötigen – nützlich für andere Anwendungsfälle wie die Bildklassifizierung -, aber wir gehen davon aus, dass wir es möglicherweise für die zukünftige Analyse griffbereit halten müssen. Daher werden wir es von den restlichen Merkmalen trennen, die mit Bildpixeln in einer neuen Variablen verbunden sind:

X = mnist_data.drop('label', axis=1)

y = mnist_data.label

Obwohl wir nach PCA keine überwachte Lerntechnik anwenden werden, werden wir davon ausgehen, dass wir dies möglicherweise in zukünftigen Analysen tun müssen. Daher werden wir den Datensatz in ein Coaching (80%) und testen (20%) Teilmengen. Es gibt einen anderen Grund, warum wir das tun. Lassen Sie mich es etwas später klarstellen.

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size = 0.2, random_state=42)

Vorverarbeitung der Daten und es für den PCA -Algorithmus geeignet zu machen, ist ebenso wichtig wie die Anwendung des Algorithmus selbst. In unserem Beispiel beinhaltet die Vorverarbeitung die Skalierung der ursprünglichen Pixelintensitäten im MNIST -Datensatz zu einem standardisierten Bereich mit einem Mittelwert von 0 und einer Standardabweichung von 1, sodass alle Merkmale einen gleichen Beitrag zu Varianzberechnungen leisten und Dominanzprobleme in bestimmten Merkmalen vermeiden. Dazu werden wir die Customary -Caler -Klasse von sklearn.preprozessing verwenden, die numerische Merkmale standardisiert:

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()

X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.remodel(X_test)

Beachten Sie die Verwendung von fit_transform Für die Trainingsdaten, während für die von uns verwendeten Testdaten remodel stattdessen. Dies ist der andere Grund, warum wir die Daten zuvor in Schulungs- und Testdaten aufgeteilt haben, um dies zu diskutieren: In Datenumwandlungen wie der Standardisierung numerischer Attribute müssen Transformationen in den Trainings- und Testsätzen konsistent sein. Der fit_transform Die Methode wird für die Trainingsdaten verwendet, da sie die erforderlichen Statistiken berechnet, die den Datenumwandlungsverfahren aus dem Trainingssatz (Anpassung) leiten, und dann die Transformation anwendet. In der Zwischenzeit wird die Transformationsmethode für die Testdaten verwendet, die dieselbe Transformation anwendet, die von den Trainingsdaten auf den Testsatz „gelernt“ wird. Dies stellt sicher, dass das Modell die Testdaten in derselben Zielskala wie die für die Trainingsdaten verwendeten, die Konsistenz und die Vermeidung von Problemen wie Datenlecks oder Verzerrung verwendet.

Jetzt können wir den PCA -Algorithmus anwenden. In der Implementierung von Scikit-Study nimmt PCA ein wichtiges Argument an: n_components. Dieser Hyperparameter bestimmt den Anteil der Hauptkomponenten. Größere Werte näher an 1 mittleren Mittelwert, die mehr Komponenten beibehalten und mehr Varianz in den Originaldaten erfassen, während die Werte näher an 0 näher aufnehmen, was weniger Komponenten aufweist und eine aggressivere Strategie zur Reduzierung der Dimensionalität anwendet. Zum Beispiel Einstellung n_components auf 0,95 impliziert, dass ausreichende Komponenten beibehalten werden, um 95% der Varianz der Originaldaten zu erfassen, was für die Reduzierung der Dimensionalität der Daten geeignet sein kann und gleichzeitig die meisten Informationen erhalten bleibt. Wenn nach der Anwendung dieser Einstellung die Datendimensionalität erheblich reduziert wird, bedeutet dies, dass viele der ursprünglichen Merkmale nicht viele statistisch relevante Informationen enthielten.

from sklearn.decomposition import PCA

pca = PCA(n_components = 0.95)
X_train_reduced = pca.fit_transform(X_train_scaled)

X_train_reduced.form

Verwenden der form Attribut des resultierenden Datensatzes Nach der Anwendung von PCA können wir feststellen, dass die Dimensionalität der Daten von 784 Funktionen auf nur 325 drastisch reduziert wurde und gleichzeitig 95% der wichtigen Informationen behält.

Ist das ein gutes Ergebnis? Die Beantwortung dieser Frage hängt weitgehend von der späteren Anwendung oder der Artwork der Analyse ab, die Sie mit Ihren reduzierten Daten durchführen möchten. Wenn Sie beispielsweise einen Bildklassifizierer von Ziffernbildern erstellen möchten, möchten Sie möglicherweise zwei Klassifizierungsmodelle erstellen: eines mit dem ursprünglichen, hochdimensionalen Datensatz und einem mit dem reduzierten Datensatz trainiert. Wenn in Ihrem zweiten Klassifizierer keinen signifikanten Verlust der Klassifizierungsgenauigkeit vorliegt, haben Sie gute Nachrichten: Sie haben einen schnelleren Klassifizierer erreicht (Dimensionalitätsreduzierung impliziert normalerweise eine größere Effizienz von Coaching und Inferenz) und eine ähnliche Klassifizierungsleistung, als würden Sie die ursprünglichen Daten verwendet.

Einpacken

Dieser Artikel wurde durch ein schrittweise Python-Tutorial dargestellt, wie der PCA-Algorithmus von Grund auf neu angewendet wird, beginnend mit einem Datensatz handgeschriebener Ziffernbilder mit hoher Dimensionalität.

Iván Palomares Carrascosa ist ein Führer, Schriftsteller, Sprecher und Berater in KI, maschinellem Lernen, Deep Studying & LLMs. Er trainiert und führt andere darin, KI in der realen Welt zu nutzen.

Von admin

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert