Redukcja wymiarów za pomocą PCA

Uczenie nienadzorowane w Pythonie

Benjamin Wilson

Director of Research at lateral.io

Redukcja wymiarów

  • Reprezentuje te same dane przy użyciu mniejszej liczby cech
  • Ważny element potoków uczenia maszynowego
  • Można wykonać za pomocą PCA
Uczenie nienadzorowane w Pythonie

Redukcja wymiarów za pomocą PCA

  • Cechy PCA są w malejącym porządku wariancji
  • Zakłada, że cechy o niskiej wariancji to „szum"
  • ... a cechy o wysokiej wariancji są informacyjne

Wykres słupkowy: numer cechy PCA a wariancja z pionową linią między 1 a 2, strzałka w lewo oznaczona „informacyjna", strzałka w prawo oznaczona „szum"

Uczenie nienadzorowane w Pythonie

Redukcja wymiarów za pomocą PCA

  • Określ, ile cech zachować
  • Np. PCA(n_components=2)
  • Zachowuje pierwsze 2 cechy PCA
  • Wymiar wewnętrzny to dobry wybór
Uczenie nienadzorowane w Pythonie

Redukcja wymiarów zbioru danych Iris

  • samples = tablica pomiarów iris (4 cechy)
  • species = lista numerów gatunków iris
from sklearn.decomposition import PCA

pca = PCA(n_components=2)
pca.fit(samples)
PCA(n_components=2)
transformed = pca.transform(samples)
print(transformed.shape)
(150, 2)
Uczenie nienadzorowane w Pythonie

Zbiór danych Iris w 2 wymiarach

  • PCA zredukowało wymiary do 2
  • Zachowano 2 cechy PCA o najwyższej wariancji
  • Ważne informacje zachowane: gatunki pozostają rozróżnialne
import matplotlib.pyplot as plt
xs = transformed[:,0]
ys = transformed[:,1]
plt.scatter(xs, ys, c=species)
plt.show()

Wykres rozrzutu PCA dla zbioru danych Iris

Uczenie nienadzorowane w Pythonie

Redukcja wymiarów za pomocą PCA

  • Odrzuca cechy PCA o niskiej wariancji
  • Zakłada, że cechy o wysokiej wariancji są informacyjne
  • Założenie zwykle sprawdza się w praktyce (np. dla iris)
Uczenie nienadzorowane w Pythonie

Macierze częstości słów

  • Wiersze reprezentują dokumenty, kolumny — słowa
  • Wartości mierzą obecność każdego słowa w każdym dokumencie
  • ... mierzone za pomocą „tf-idf" (więcej później)

Macierz częstości słów

Uczenie nienadzorowane w Pythonie

Rzadkie macierze i csr_matrix

  • „Rzadka": większość wartości to zera
  • Można użyć scipy.sparse.csr_matrix zamiast tablicy NumPy
  • csr_matrix przechowuje tylko wartości niezerowe (oszczędność pamięci!)

Macierz częstości słów

Uczenie nienadzorowane w Pythonie

TruncatedSVD i csr_matrix

  • PCA z scikit-learn nie obsługuje csr_matrix
  • Zamiast tego należy użyć TruncatedSVD
  • Wykonuje tę samą transformację
from sklearn.decomposition import TruncatedSVD
model = TruncatedSVD(n_components=3)
model.fit(documents)  # documents is csr_matrix
transformed = model.transform(documents)
Uczenie nienadzorowane w Pythonie

Czas na ćwiczenia!

Uczenie nienadzorowane w Pythonie

Preparing Video For Download...