Pull to refresh

Comments 4

Очень полезный пост). Спасибо большое, как раз надо написать свою реализацию PCA для лабы, а так теория хоть будет))

Появилось несколько вопросов:

Когда мы уменьшаем размерность, мы явно как то платим точностью(хоть и не сильно значительно): меняется ли плата за точность от способа к способу?

Правильно ли я понимаю, что в методе Ланцоша мы как то интересно применили метод Грамма-Шмидта, или он совсем тут не причем?

Как примерно выбирается k? Есть ли оптимальный выбор? (Условно говоря корень или деление на три)

За такую хорошую асимптотику в методе Ланцоша мы теряем что то, или мы "магическим образом" уменьшили ошку

Что из всего этого действительно часто применяется на практике? Или все больше теория?

1) если говорить о трёх вышеперечисленных способах то нет, это грубо говоря 3 алгоритма для решения одной и той же задачи.

Потеря алгоритма определяется скорее выбором k. Разве что в методе Ланцоша из-за его итеративной философии мы потеряем в качестве если остановимся слишком рано.

2) грубо говоря, да. философия у них крайне похожая. только вот в теоретическом методе у нас есть замечательное рекуррентное соотношение, которое нам позволяет не трогать все подряд, а работать с последними двумя векторами. И это ключевое отличие. А вот в переортогонализации (то что описано в конце статьи) уже используется именно модификация Грама Шмидта.

3) выбор k обычно такой:

Если используем PCA для визуализации берём k=2 или 3

А в общем случае обычно подбирают через кросс валидацию

Есть ещё вариант попробовать подобрать k так, чтобы получить как можно больше объясненной дисперсии (explained_variance_ratio_ в sklearn)

4) ни то, ни другое :) мы просто решаем более узкую задачу (находим первые несколько компонент). Только уже возникает другая проблема - сходимость может быть медленной на плохом спектре.

5) И svd и Ланцош используются на практике. Полный свд берут когда датасет маленький, тогда нам плевать на кубическую сложность, как-то потерпим. Ланцоша берут для больших разреженных матриц (такое тоже часто в мл встречается). А на больших плотных данных, наверное, чаще всего используют randomized svd. С одной стороны это как обычный свд, с другой – он берет только первые несколько k+p компонент , примерно как Ланцош. Здесь p это "запас" (условно p=10)

Отличная статья! Спасибо!
Математика для меня все еще выглядит как какая-то магия. Удивительно, до чего люди смогли додуматься

Sign up to leave a comment.

Articles