Dimensiereductie met PCA

Unsupervised Learning in Python

Benjamin Wilson

Director of Research at lateral.io

Dimensiereductie

  • Zelfde data, met minder features
  • Belangrijk onderdeel van ML-pijplijnen
  • Kan met PCA
Unsupervised Learning in Python

Dimensiereductie met PCA

  • PCA-features staan op afnemende variantie
  • Neemt aan: lage variantie = "ruis"
  • ... en hoge variantie = informatief

Staafdiagram: pca-feature-nummer vs variantie met verticale lijn tussen 1 en 2, pijl links informatief, pijl rechts ruiserig

Unsupervised Learning in Python

Dimensiereductie met PCA

  • Geef aan hoeveel features je behoudt
  • Bijv. PCA(n_components=2)
  • Behoudt de eerste 2 PCA-features
  • Intrinsieke dimensie is een goede keuze
Unsupervised Learning in Python

Dimensiereductie van het iris-dataset

  • samples = array met iris-metingen (4 features)
  • species = lijst met irissoortnummers
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)
Unsupervised Learning in Python

Iris-dataset in 2 dimensies

  • PCA heeft teruggebracht naar 2 dimensies
  • De 2 PCA-features met hoogste variantie behouden
  • Belangrijke info blijft: soorten blijven onderscheiden
import matplotlib.pyplot as plt
xs = transformed[:,0]
ys = transformed[:,1]
plt.scatter(xs, ys, c=species)
plt.show()

Spreidingsdiagram van PCA op het Iris-dataset

Unsupervised Learning in Python

Dimensiereductie met PCA

  • Gooi PCA-features met lage variantie weg
  • Veronderstelt dat features met hoge variantie informatief zijn
  • In de praktijk meestal waar (bijv. voor iris)
Unsupervised Learning in Python

Woordfrequentiematrices

  • Rijen zijn documenten, kolommen woorden
  • Waarden meten aanwezigheid van elk woord per document
  • ... gemeten met "tf-idf" (later meer)

Woordfrequentiematrix

Unsupervised Learning in Python

Sparse arrays en csr_matrix

  • "Schaars": de meeste waarden zijn nul
  • Gebruik scipy.sparse.csr_matrix i.p.v. een NumPy-array
  • csr_matrix bewaart alleen niet-nulwaarden (spaart ruimte!)

Woordfrequentiematrix

Unsupervised Learning in Python

TruncatedSVD en csr_matrix

  • scikit-learn PCA ondersteunt geen csr_matrix
  • Gebruik TruncatedSVD van scikit-learn
  • Voert dezelfde transformatie uit
from sklearn.decomposition import TruncatedSVD
model = TruncatedSVD(n_components=3)
model.fit(documents)  # documents is csr_matrix
transformed = model.transform(documents)
Unsupervised Learning in Python

Laten we oefenen!

Unsupervised Learning in Python

Preparing Video For Download...