Что такое метод главных компонент (PCA)?

«Что такое метод главных компонент (PCA)?» — вопрос из категории Классическое ML, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

PCA (Principal Component Analysis) — это алгоритм обучения без учителя для снижения размерности данных. Он находит новые оси (главные компоненты), вдоль которых дисперсия данных максимальна, и проецирует данные на эти оси.

Как это работает:

  1. Центрирование данных: Вычитается среднее значение по каждому признаку.
  2. Вычисление ковариационной матрицы.
  3. Собственное разложение: Находятся собственные векторы (главные компоненты) и собственные значения (объяснённая дисперсия).
  4. Проекция: Данные умножаются на матрицу из выбранных главных компонент.

Практическое применение с Scikit-learn:

from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt

# Загрузка данных
iris = load_iris()
X = iris.data
y = iris.target

# КРИТИЧНЫЙ ШАГ: Масштабирование признаков
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# Применение PCA для уменьшения до 2 компонент
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)

print(f"Объяснённая дисперсия каждой компоненты: {pca.explained_variance_ratio_}")
print(f"Суммарная объяснённая дисперсия: {sum(pca.explained_variance_ratio_):.2%}")

# Визуализация
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y)
plt.xlabel('PC1')
plt.ylabel('PC2')
plt.title('Iris dataset после PCA')
plt.show()

Зачем это нужно:

  • Визуализация многомерных данных (сведение к 2D/3D).
  • Ускорение обучения моделей за счёт уменьшения числа признаков.
  • Подавление шума, так как последние компоненты часто несут мало информации.

Важные нюансы:

  • PCA — линейный метод. Для нелинейных данных лучше подходят t-SNE или UMAP.
  • Интерпретируемость новых признаков (PC) теряется — они являются линейными комбинациями исходных.