Menu
CoddyTech

PCA

Teil des Abschnitts Unüberwachtes Lernen der Machine Learning-Journey von Coddy. Lektion 26 von 51.

PCA findet die Richtung mit der größten Streuung, dann die beste Richtung im rechten Winkel dazu und so weiter: die Komponenten. Bei den Wein-Zwillingen:

Die skalierten Wein-Zwillinge als eine nach rechts ansteigende Wolke, mit zwei roten Pfeilen vom Mittelpunkt: ein langer, Komponente 1, entlang der Wolke, und ein kurzer, Komponente 2, quer dazu

Die Projektionen jeder Zeile auf die ersten paar Komponenten werden zu ihren neuen Merkmalen:

from sklearn.decomposition import PCA
scaled = StandardScaler().fit_transform(X)
points = PCA(n_components=2).fit_transform(scaled)
print(X.shape, points.shape)

Für alle 13 Weinmessungen wird Folgendes ausgegeben: (178, 13) (178, 2).

Zuerst skalieren. PCA orientiert sich an der Streuung, daher setzt sich ein Merkmal mit großen Einheiten, wie Prolin im Hunderterbereich, allein aufgrund seiner Größe durch:

Zwei PCA-Karten der 178 Weine. Links, nicht skaliert: Die drei Rebsorten überlappen in einem einzigen Fleck. Rechts, zuerst skaliert: drei klare Gruppen

challenge icon

Aufgabe

Mittel

Ein Wasserlabor testet Flaschen aus drei Quellen mit jeweils 8 Messungen. Kann eine 2D-Karte die Quellen voneinander unterscheiden? draw_springs(ax, points) färbt beliebige 2D-Punkte nach Quelle ein.

  1. Skaliere X und reduziere es dann mit PCA auf 2 Komponenten in points.
  2. Gib die Anzahl der Merkmale vor und nach der Reduktion aus.
  3. Zeichne die Punkte mit draw_springs und zeige die Grafik an.

Für ein anderes Labor mit 6 Messungen:

From 6 features to 2

Ein Diagramm mit dem Titel Quellwasser in 2D, wobei die erste Komponente auf der waagerechten und die zweite auf der senkrechten Achse liegt: Flaschen aus alpinen Quellen unten links, aus vulkanischen Quellen unten rechts und aus Küstenquellen oben, mit einer Legende

Coddy beschreibt deine Karte.

Probier es selbst

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA

# Ein Wasserlabor: 8 Messwerte für jede der 120 Flaschen aus drei Quellen
waters = pd.read_csv("waters.csv")
X = waters.drop(columns="spring")


# Stellt 2D-Punkte als Streudiagramm dar, mit einer Gruppe pro Quelle und einer Legende
def draw_springs(ax, points):
    for spring in ["alpine", "volcanic", "coastal"]:
        rows = (waters["spring"] == spring).to_numpy()
        ax.scatter(points[rows, 0], points[rows, 1], s=16, label=spring)
    ax.legend()


fig, ax = plt.subplots()
ax.set_title("Spring Waters in 2D")
ax.set_xlabel("First component")
ax.set_ylabel("Second component")

# Schreibe deinen Code unten
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Unüberwachtes Lernen

Übe selbstständig: Online-Python-Compiler