Как PCA считают через SVD
Вопрос
Расскажите, как устроен PCA и почему на практике его считают через SVD матрицы данных, а не через собственные векторы ковариационной матрицы.
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Центрирование данных обязательно, стандартизация при разных единицах
Компоненты это собственные векторы ковариационной матрицы, упорядоченные по дисперсии
Через SVD: X = UΣVᵀ, компоненты это столбцы V, дисперсии σ²/(n-1)
SVD численно устойчивее: не нужно явно строить XᵀX, где число обусловленности возводится в квадрат
Выбор числа компонент по доле объяснённой дисперсии (например 95%) или по задаче
Что могут спросить следом
- Что делать, если данных так много, что X не помещается в память?
- Чем PCA отличается от t-SNE и UMAP?
Разбор
PCA ищет ортогональные направления, вдоль которых данные разбросаны сильнее всего. Сначала признаки центрируют, а если они в разных единицах, ещё и стандартизуют. Классическая формулировка: собственные векторы ковариационной матрицы C = XᵀX/(n-1), упорядоченные по убыванию собственных значений, а значение равно дисперсии вдоль компоненты. На практике берут SVD центрированной X = UΣVᵀ: столбцы V и есть компоненты, дисперсии равны σᵢ²/(n-1), проекции равны UΣ. Так лучше, потому что не надо строить XᵀX: при этом число обусловленности возводится в квадрат и теряется точность. Плюс есть быстрые рандомизированные и усечённые SVD, которые считают только первые k компонент. Число компонент выбирают по доле объяснённой дисперсии, по «локтю» на графике или по качеству следующей модели. Для данных, не влезающих в память, есть инкрементальный PCA.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.