У меня есть набор данных, который медленно меняется, и мне нужно отслеживать собственные векторы / собственные значения его ковариационной матрицы.
Я использовал scipy.linalg.eigh
, но это слишком дорого, и это не использует тот факт, что у меня уже есть разложение, которое только немного неправильно.
Кто-нибудь может предложить лучший подход для решения этой проблемы?
linear-algebra
optimization
python
eigenvalues
Ярослав Булатов
источник
источник
Ответы:
Наивный подход состоит в том, чтобы использовать решение собственных значений вашей матрицы в качестве начального предположения итеративного решения eigensolver для матрицы A ( t + δ t ) . Вы можете использовать QR, если вам нужен полный спектр, или другой способ питания. Однако это не совсем надежный подход, поскольку собственные значения матрицы не обязательно близки к почти соседней матрице (1) , особенно если она плохо обусловлена (2) .А ( т ) A ( t + δт )
Метод отслеживания подпространства, по-видимому, более полезен (3) . Выдержка из (4) :
Я должен также упомянуть, что решения симметричных матриц, такие как то, что вы должны решать, используя свое использование
scipy.linalg.eigh
, несколько дешевы. Если вас интересуют только несколько собственных значений, вы также можете найти улучшение скорости в вашем методе. Метод Арнольди часто используется в таких ситуациях.источник
Вот пара соответствующих ссылок:
Адаптивная собственная декомпозиция ковариационных матриц данных на основе возмущений первого порядка (Шампань, IEEE TSP 42 (10) 1994)
Рекурсивное обновление разложения по собственным значениям ковариационной матрицы (Yu, IEEE TSP, 39 (5) 1991)
Анализ основных компонентов в режиме онлайн в высоком измерении: какой алгоритм выбрать? (Кардо и Деграс)
Стабильный и быстрый алгоритм обновления разложения по сингулярным значениям (Gu and Eisenstadt, 1994)
источник