Зменшення розмірності за допомогою PCA

Наглядове навчання в Python

Benjamin Wilson

Director of Research at lateral.io

Зменшення розмірності

  • Подання тих самих даних з меншою кількістю ознак
  • Важлива частина конвеєрів машинного навчання
  • Можна виконати за допомогою PCA
Наглядове навчання в Python

Зменшення розмірності за допомогою PCA

  • Ознаки PCA впорядковані за спаданням дисперсії
  • Припускає, що ознаки з малою дисперсією — це «шум»
  • ... а ознаки з великою дисперсією — інформативні

Стовпчикова діаграма: номер ознаки PCA проти дисперсії з вертикальною лінією між 1 і 2; ліворуч стрілка «informative», праворуч — «noisy»

Наглядове навчання в Python

Зменшення розмірності за допомогою PCA

  • Вкажіть, скільки ознак залишити
  • Напр., PCA(n_components=2)
  • Залишає перші 2 ознаки PCA
  • Добрий вибір — внутрішня розмірність
Наглядове навчання в Python

Зменшення розмірності набору даних iris

  • samples = масив вимірювань iris (4 ознаки)
  • species = список номерів видів 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)
Наглядове навчання в Python

Набір Iris у 2 вимірах

  • PCA зменшила розмірність до 2
  • Збережено 2 ознаки PCA з найбільшою дисперсією
  • Важлива інформація збереглася: види залишаються відмінними
import matplotlib.pyplot as plt
xs = transformed[:,0]
ys = transformed[:,1]
plt.scatter(xs, ys, c=species)
plt.show()

Точкова діаграма PCA для набору Iris

Наглядове навчання в Python

Зменшення розмірності за допомогою PCA

  • Відкидає ознаки PCA з малою дисперсією
  • Припускає, що ознаки з великою дисперсією — інформативні
  • На практиці зазвичай виконується (напр., для iris)
Наглядове навчання в Python

Масиви частот слів

  • Рядки — документи, стовпці — слова
  • Значення відображають наявність кожного слова в документі
  • ... за мірою «tf-idf» (деталі згодом)

Масив частот слів

Наглядове навчання в Python

Розріджені масиви та csr_matrix

  • «Розріджені»: більшість елементів — нулі
  • Можна використовувати scipy.sparse.csr_matrix замість масиву NumPy
  • csr_matrix зберігає лише ненульові елементи (економить місце!)

Масив частот слів

Наглядове навчання в Python

TruncatedSVD і csr_matrix

  • PCA з scikit-learn не підтримує csr_matrix
  • Натомість використовуйте TruncatedSVD зі scikit-learn
  • Виконує ту саму трансформацію
from sklearn.decomposition import TruncatedSVD
model = TruncatedSVD(n_components=3)
model.fit(documents)  # documents is csr_matrix
transformed = model.transform(documents)
Наглядове навчання в Python

Давайте потренуємось!

Наглядове навчання в Python

Preparing Video For Download...