Снижение размерности с помощью PCA

Обучение без учителя на Python

Benjamin Wilson

Director of Research at lateral.io

Снижение размерности

  • Представляет те же данные с меньшим числом признаков
  • Важная часть конвейеров машинного обучения
  • Выполняется с помощью PCA
Обучение без учителя на Python

Снижение размерности с помощью PCA

  • Признаки PCA упорядочены по убыванию дисперсии
  • Признаки с низкой дисперсией считаются «шумом»
  • ... а с высокой дисперсией — информативными

Столбчатая диаграмма: номер признака PCA и его дисперсия с вертикальной линией между 1 и 2, стрелка влево — «информативные», стрелка вправо — «шумовые»

Обучение без учителя на Python

Снижение размерности с помощью PCA

  • Задайте количество сохраняемых признаков
  • Например, PCA(n_components=2)
  • Сохраняет первые 2 признака PCA
  • Хороший выбор — внутренняя размерность
Обучение без учителя на Python

Снижение размерности набора данных Iris

  • samples = массив измерений ирисов (4 признака)
  • species = список номеров видов ириса
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

  • «Разреженный»: большинство значений равны нулю
  • Вместо массива NumPy можно использовать scipy.sparse.csr_matrix
  • 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...