# PCA, t-SNE, UMAP и визуализация размерности > Снижение размерности строит новое представление. PCA сохраняет линейную > дисперсию, t-SNE и UMAP — главным образом локальные соседства. ## Зачем снижать размерность Цели различаются: сжатие, подавление шума, ускорение модели, борьба с коллинеарностью или двумерная визуализация. Метод, хороший для картинки, не обязательно даёт признаки для prediction. Любая проекция теряет информацию; оценивать следует именно целевое применение. ## PCA: постановка Пусть центрированная \(\mathbf X_c=\mathbf X-\mathbf1\bar{\mathbf x}^{\top}\in\mathbb R^{n\times d}\). Первая главная компонента — единичный вектор максимальной дисперсии: \[ \mathbf v_1\in\arg\max_{\|\mathbf v\|=1} \frac1n\|\mathbf X_c\mathbf v\|_2^2 =\arg\max_{\|\mathbf v\|=1}\mathbf v^\top \left(\frac1n\mathbf X_c^\top\mathbf X_c\right)\mathbf v. \] С множителем Лагранжа: \[ \mathcal L=\mathbf v^\top\boldsymbol\Sigma\mathbf v -\lambda(\mathbf v^\top\mathbf v-1),\quad \nabla_{\mathbf v}\mathcal L=2\boldsymbol\Sigma\mathbf v-2\lambda\mathbf v=0. \] Следовательно, \(\boldsymbol\Sigma\mathbf v=\lambda\mathbf v\): компоненты — собственные векторы ковариации, дисперсии — собственные значения. Последующие компоненты ортогональны предыдущим. Через SVD \(\mathbf X_c=\mathbf U\mathbf S\mathbf V^\top\): строки \(\mathbf V^\top\) задают направления, scores \(\mathbf Z=\mathbf X_c\mathbf V_q=\mathbf U_q\mathbf S_q\). SVD устойчивее явного построения ковариации. ## Ковариация PCA: деление на \(n\) или \(n-1\) Для центрированной матрицы используют обе договорённости: \[ \boldsymbol\Sigma_n=\frac1n\mathbf X_c^\top\mathbf X_c,\qquad \boldsymbol\Sigma_{n-1}=\frac1{n-1}\mathbf X_c^\top\mathbf X_c. \] Первая — эмпирическая covariance как среднее по наблюдаемому распределению; вторая — несмещённая оценка covariance генеральной совокупности при iid-выборке. Матрицы отличаются только положительным скаляром \(n/(n-1)\), поэтому их собственные векторы, порядок компонент, scores и explained variance **ratio** совпадают. Отличаются собственные значения и абсолютные `explained_variance_`. Например, scikit-learn сообщает выборочные дисперсии с делением на \(n-1\), тогда как в выводе выше использовано \(1/n\). При сравнении ручной реализации с библиотекой нужно согласовать `ddof`; это не разные направления PCA. ## PCA как лучшая линейная реконструкция Реконструкция из \(q\) компонент: \[ \hat{\mathbf X}=\mathbf Z\mathbf V_q^\top+ \mathbf1\bar{\mathbf x}^{\top}. \] Теорема Эккарта—Янга даёт \[ \|\mathbf X_c-\mathbf U_q\mathbf S_q\mathbf V_q^\top\|_F^2 =\sum_{j>q}s_j^2, \] минимум среди rank-\(q\) приближений. Explained variance ratio компоненты \(\lambda_j/\sum_k\lambda_k\). Высокая сохранённая дисперсия не гарантирует сохранение слабого, но предсказательного сигнала. PCA требует центрирования. Стандартизация нужна, если единицы несопоставимы и variance не должна отражать физический масштаб. Whitening дополнительно делит scores на стандартные отклонения, уничтожая различия дисперсий и усиливая малодисперсионный шум. ## Числовой пример PCA Для центрированных точек \((-1,-1),(0,0),(1,1)\): \[ \boldsymbol\Sigma=\frac13 \begin{bmatrix}2&2\\2&2\end{bmatrix}. \] Собственные направления: \(\mathbf v_1=(1,1)^\top/\sqrt2\) с \(\lambda_1=4/3\) и \(\mathbf v_2=(1,-1)^\top/\sqrt2\) с \(\lambda_2=0\). Одна компонента восстанавливает данные точно: точки лежат на прямой. Знак \(\mathbf v_1\) произволен; смена знака не меняет подпространство. ## t-SNE t-SNE превращает расстояния в вероятности соседства. В исходном пространстве условные \(p_{j\mid i}\) строятся Gaussian с локально подобранной шириной; **perplexity** примерно задаёт эффективное число соседей. После симметризации получают \(p_{ij}\). В 2D используют тяжёлые хвосты Student: \[ q_{ij}\propto(1+\|\mathbf z_i-\mathbf z_j\|^2)^{-1}. \] Минимизируется \[ \operatorname{KL}(P\|Q)=\sum_{i\ne j}p_{ij}\log\frac{p_{ij}}{q_{ij}}. \] Асимметрия KL сильно штрафует потерю истинных соседей, но слабее — появление далёких ложных отношений. Поэтому локальные группы видны хорошо, а расстояния между «островами», их размеры и плотности обычно не интерпретируются. Результат зависит от seed, perplexity, learning rate и числа итераций. t-SNE — прежде всего исследовательская визуализация, не доказательство кластеров. ## UMAP UMAP строит взвешенный граф \(k\) ближайших соседей с локальным масштабом и оптимизирует низкоразмерный граф, притягивая рёбра и отталкивая sampled не-соседей. `n_neighbors` задаёт локально-глобальный компромисс, `min_dist` — насколько плотно точки могут упаковываться. UMAP обычно быстрее t-SNE, поддерживает `transform` новых объектов в реализациих и нередко лучше сохраняет часть глобальной структуры, но не гарантирует геометрически точных межкластерных расстояний. Seed и параметры способны менять картинку. Теоретические manifold-предположения — локальная низкая размерность и осмысленная метрика — должны быть хотя бы приблизительно правдоподобны. ## Безопасный протокол 1. Fit scaler/PCA/UMAP только на train, если embedding участвует в модели. 2. Для визуализации сначала удалить явный шум или применить PCA до 30–50 компонент, затем t-SNE/UMAP. 3. Повторить seed и диапазон параметров. 4. Красить точки метками только после построения embedding; иначе не выдавать supervised настройку за unsupervised. 5. Оценить reconstruction (PCA), trustworthiness соседств и downstream-метрику. ## Самостоятельный пример sklearn ```python from sklearn.datasets import load_digits from sklearn.decomposition import PCA from sklearn.metrics import mean_squared_error from sklearn.preprocessing import StandardScaler X, _ = load_digits(return_X_y=True) X_scaled = StandardScaler().fit_transform(X) pca = PCA(n_components=0.95, svd_solver="full") Z = pca.fit_transform(X_scaled) X_hat = pca.inverse_transform(Z) print("shape:", X.shape, "->", Z.shape) print("variance:", pca.explained_variance_ratio_.sum()) print("reconstruction MSE:", mean_squared_error(X_scaled, X_hat)) ``` Для UMAP нужен отдельный пакет `umap-learn`; базовый учебный код намеренно не делает его обязательной зависимостью. ## Типичные ошибки и ограничения - Интерпретировать оси t-SNE/UMAP как исходные признаки. - Считать расстояние между островами количественно значимым. - Подбирать картинку до желаемого сюжета и скрывать другие seed. - Выполнить PCA до split и получить утечку в downstream-оценке. - Выбирать число PCA-компонент только по 95% variance, не проверяя целевую метрику. - Применять евклидову метрику к неподходящим сырым данным. ## Краткое резюме - PCA — оптимальная линейная rank-\(q\) реконструкция центрированных данных. - t-SNE сохраняет вероятностные локальные соседства, не глобальную карту. - UMAP оптимизирует представление графа соседей и также зависит от параметров. - Визуализация — источник гипотез, а не статистическое доказательство кластеров. ## Связанные материалы - Практика: [`../assignments/02_embeddings.md`](../assignments/02_embeddings.md). - Предыдущая глава: [`02_clustering_algorithms.md`](02_clustering_algorithms.md). - Следующая глава: [`04_anomaly_detection.md`](04_anomaly_detection.md). - Термины: [`../glossary.md`](../glossary.md).