Ответ
Процент потерянной дисперсии — это доля информации (дисперсии), которая не сохранилась после проецирования данных на выбранные главные компоненты. Он рассчитывается как 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%).
Ответ 18+ 🔞
Давай разберём эту тему, а то у некоторых от этих терминов глаза на лоб лезут, как будто они мартышлюшки в цирке увидели.
Представь, у тебя есть куча данных — ну там, десять разных признаков, овердохуища всего. А ты хочешь это всё впихнуть в три главные компоненты, чтобы проще было. Так вот, процент потерянной дисперсии — это как раз та самая информация, которая нахуй улетучилась, когда ты своё богатство в три столбика утрамбовал. Считается просто: берёшь единицу и вычитаешь из неё всю дисперсию, которую твои выбранные компоненты смогли удержать.
В scikit-learn всё уже для тебя приготовили, небось. Каждая компонента после PCA тащит с собой свою долю объяснённой дисперсии, и лежит это добро в атрибуте 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, оставляя только три главные компоненты
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%}")
Зачем это вообще нужно? А затем, чувак, чтобы не облажаться. Смотри: если потерянная дисперсия подскакивает, скажем, до 30%, это уже пиздец как много — значит, ты выкинул почти треть информации, и твоя модель теперь будет как слепой котёнок. Обычно ставят порог, например, 5% — и подбирают число компонент так, чтобы потеря не превышала этот уровень. Всё просто, как три копейки: меньше потерял — лучше сохранил суть данных. А если потерял слишком много, то твоя модель — просто хитрая жопа, которая нихрена не покажет.