Menu
CoddyTech

PCA

Część sekcji Uczenie nienadzorowane ścieżki Machine Learning w Coddy. Lekcja 26 z 51.

PCA znajduje kierunek największego rozrzutu, a następnie najlepszy kierunek prostopadły do niego i tak dalej: składowe. W przypadku bliźniaczych win:

Przeskalowane bliźniacze wina jako chmura wznosząca się w prawo, z dwiema czerwonymi strzałkami wychodzącymi ze środka: długą, składową 1, wzdłuż chmury, oraz krótką, składową 2, w poprzek chmury

Cienie każdego wiersza na pierwszych kilku składowych stają się jego nowymi cechami:

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

Dla wszystkich 13 pomiarów wina wypisuje to (178, 13) (178, 2).

Najpierw przeskaluj dane. PCA śledzi rozrzut, więc cecha wyrażona w dużych jednostkach, taka jak proline, której wartości sięgają setek, wygrywa już samym rozmiarem:

Dwie mapy PCA przedstawiające 178 win. Po lewej dane bez skalowania: trzy odmiany winorośli zlewają się w jedną plamę. Po prawej dane najpierw przeskalowane: trzy wyraźne grupy

challenge icon

Wyzwanie

Średni

Laboratorium wody bada butelki z trzech źródeł, wykonując po 8 pomiarów każdej. Czy mapa 2D pozwoli odróżnić źródła? draw_springs(ax, points) koloruje dowolne punkty 2D według źródła.

  1. Przeskaluj X, a następnie zredukuj je do 2 komponentów za pomocą PCA, zapisując wynik w points.
  2. Wyświetl liczbę cech przed redukcją i po niej.
  3. Narysuj punkty za pomocą draw_springs i wyświetl wykres.

W innym laboratorium, z 6 pomiarami:

From 6 features to 2

Wykres zatytułowany Wody źródlane w 2D, z pierwszym komponentem na osi poziomej i drugim na pionowej: butelki ze źródła alpejskiego w lewym dolnym rogu, wulkanicznego w prawym dolnym rogu, a nadmorskiego u góry; obok legenda

Coddy opisze Twoją mapę.

Spróbuj swoich sił

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

# Laboratorium badające wodę: 8 pomiarów dla każdej ze 120 butelek pochodzących z trzech źródeł
waters = pd.read_csv("waters.csv")
X = waters.drop(columns="spring")


# Rysuje wykres punktowy w 2D, z jedną grupą dla każdego źródła i legendą
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")

# Napisz swój kod poniżej
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Uczenie nienadzorowane

Poćwicz samodzielnie: Kompilator Python online