Ответ
PCA (Principal Component Analysis) — это алгоритм обучения без учителя для снижения размерности данных. Он находит новые оси (главные компоненты), вдоль которых дисперсия данных максимальна, и проецирует данные на эти оси.
Как это работает:
- Центрирование данных: Вычитается среднее значение по каждому признаку.
- Вычисление ковариационной матрицы.
- Собственное разложение: Находятся собственные векторы (главные компоненты) и собственные значения (объяснённая дисперсия).
- Проекция: Данные умножаются на матрицу из выбранных главных компонент.
Практическое применение с 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) теряется — они являются линейными комбинациями исходных.