Как определить процент потерянной дисперсии при использовании метода PCA?

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

Ответ

Процент потерянной дисперсии — это доля информации (дисперсии), которая не сохранилась после проецирования данных на выбранные главные компоненты. Он рассчитывается как 1 - сумма объяснённой дисперсии выбранных компонент.

В scikit-learn объяснённая дисперсия для каждой компоненты хранится в атрибуте explained_variance_ratio_.

Пример расчёта:

from sklearn.decomposition import PCA
import numpy as np

# Генерация синтетических данных
np.random.seed(42)
X = np.random.randn(100, 10)  # 100 объектов, 10 признаков

# Применяем PCA, оставляя 3 главные компоненты
pca = PCA(n_components=3)
X_transformed = pca.fit_transform(X)

# Суммарная объяснённая дисперсия
explained_variance_total = np.sum(pca.explained_variance_ratio_)

# Потерянная дисперсия
lost_variance = 1 - explained_variance_total

print(f"Объяснённая дисперсия: {explained_variance_total:.2%}")
print(f"Потерянная дисперсия: {lost_variance:.2%}")

Практическое применение: Этот показатель помогает принять решение о количестве компонент. Например, можно подбирать n_components так, чтобы потерянная дисперсия не превышала заданный порог (например, 5%).