Principal Component Analysis (PCA)
Метод главных компонент (PCA) проецирует данные на ортогональные направления, отражающие наибольшую дисперсию. Как он работает, как выбрать k, сферы применения и примеры кода.
Анализ главных компонент (PCA) — это линейный метод снижения размерности, который представляет данные в виде новых некоррелированных переменных, называемых главными компонентами и упорядоченных по доле дисперсии данных, которую они объясняют. Если оставить только первые несколько компонент, множество коррелирующих признаков сжимается до небольшого набора при сохранении большей части информации. Карл Пирсон предложил этот метод в 1901 году, а Гарольд Хотеллинг развил его и дал ему название в 1933 году. PCA — это обучение без учителя, при котором метки не учитываются; метод служит стандартным этапом предобработки данных, быстрым способом визуализации многомерных данных в двух или трех измерениях и базовым методом сжатия и удаления шума в машинном обучении.
Как работает PCA#
Сначала PCA центрирует каждый признак, вычитая его среднее значение. Первая главная компонента задает направление, в котором центрированные данные изменяются сильнее всего; каждая последующая задает направление наибольшей оставшейся дисперсии, ортогональное всем предыдущим. Компоненты являются собственными векторами ковариационной матрицы данных, а соответствующие им собственные значения — дисперсиями вдоль этих векторов. Библиотеки вычисляют их с помощью сингулярного разложения (SVD) центрированных данных: этот метод численно устойчивее, чем построение ковариационной матрицы. Проекция данных на первые k компонент дает уменьшенное представление, а обратное преобразование восстанавливает приближенную исходную версию. Среди всех линейных проекций в k измерений проекция PCA обеспечивает наименьшую среднеквадратичную ошибку восстановления.
Дисперсия зависит от единиц измерения, поэтому признаки в разных масштабах, например доход в долларах и возраст в годах, сначала стандартизируют; иначе первая компонента будет определяться признаком с наибольшим числовым диапазоном. Число компонент k обычно выбирают по доле объясненной дисперсии: компоненты оставляют, пока их суммарная доля не достигнет заданного значения, например 95%, либо ориентируются на точку перегиба графика дисперсии по компонентам.
PCA в Scikit-learn позволяет напрямую задать целевую долю дисперсии. В этом примере сжимаются изображения рукописных цифр размером 8×8:
from sklearn.datasets import load_digits
from sklearn.decomposition import PCA
# 1,797 handwritten digits, each an 8x8 image flattened to 64 pixel values
X, _ = load_digits(return_X_y=True)
# Keep the fewest components that explain 95% of the variance
pca = PCA(n_components=0.95)
X_reduced = pca.fit_transform(X)
print(f"{X.shape[1]} features -> {pca.n_components_} components")
print(f"First two components: {pca.explained_variance_ratio_[:2].sum():.1%} of the variance")Двадцать девять компонент сохраняют 95% дисперсии пикселей из 64, сокращая размер входных данных более чем вдвое, а на первые две компоненты приходится всего 28,5%. Дисперсия концентрируется благодаря сильной корреляции соседних пикселей и тому, что пиксели у левого и правого краев изображений почти не меняются.
Ограничения#
PCA выявляет только линейные структуры, поэтому для данных, лежащих на искривлённой поверхности, требуется больше компонент, чем соответствует их истинной размерности. Каждая компонента смешивает все исходные признаки, поэтому её трудно интерпретировать, а использование квадратов расстояний позволяет нескольким выбросам сместить компоненты. Высокая дисперсия также не означает высокую полезность: направление с низкой дисперсией может содержать сигнал, разделяющий два класса, поэтому его отбрасывание может ухудшить работу классификатора, хотя теряется лишь небольшая часть дисперсии. Сокращение множества признаков до нескольких помогает справиться с проклятием размерности: по мере роста числа признаков моделям требуется гораздо больше примеров для обобщения. Это также ограничивает переобучение, когда признаков много, а примеров мало.
PCA для эмбеддингов в компьютерном зрении#
Модели компьютерного зрения описывают каждое изображение или объект с помощью эмбеддинга — вектора из сотен чисел. PCA часто используют как первый шаг для визуализации, кластеризации или сжатия таких векторов. Модели YOLO26 возвращают по одному эмбеддингу на изображение через model.embed(), а проекция этих векторов на первые две главные компоненты даёт быструю линейную карту того, как модель, обученная на пользовательских данных, разделяет классы. Сокращение размерности сохранённых эмбеддингов также уменьшает индекс векторной базы данных и ускоряет векторный поиск.
Применение#
- Распознавание лиц: Метод собственных лиц Турка и Пентланда (1991) представлял каждое лицо координатами на главных компонентах набора изображений лиц и распознавал людей, сравнивая эти координаты.
- Обнаружение аномалий: Для мониторинга промышленных процессов PCA подгоняют к данным датчиков, полученным при нормальной работе, и подают сигнал тревоги, если новое измерение плохо реконструируется или сильно отклоняется по сохранённым компонентам.
- Популяционная генетика: PCA генотипических данных обобщает сведения о происхождении, а в исследовании 2008 года с участием 1 387 европейцев первые две компоненты воспроизвели узнаваемую карту Европы.
- Процентный риск: Изменения кривой доходности облигаций определяются тремя компонентами, которые аналитики называют уровнем, наклоном и кривизной. Поэтому модели риска отслеживают три числа вместо всех сроков погашения.
PCA и родственные методы#
- t-SNE и UMAP: Нелинейные методы для визуализации, сохраняющие локальные окрестности, благодаря чему кластеры разделяются нагляднее, но расстояния между удалёнными кластерами теряют смысл. В t-SNE из Scikit-learn нет метода transform для новых точек, а обученная модель PCA проецирует новые данные одним умножением матриц.
- Автоэнкодеры: Нейронные сети, сжимающие и реконструирующие данные и способные изучать нелинейные структуры. Линейный автоэнкодер, обученный по квадратичной ошибке, изучает то же подпространство, что и PCA.
- Отбор и извлечение признаков: При отборе признаков сохраняют подмножество исходных столбцов, которые остаются интерпретируемыми. PCA — классический метод извлечения признаков — создаёт новые признаки, объединяющие все исходные.
- Линейный дискриминантный анализ (LDA): Родственный метод с учителем, который выбирает направления, максимизирующие разделение классов, а не общую дисперсию, и формирует не более чем на одну компоненту меньше, чем число классов.










