Так, ви можете оновити розклад SVD після додавання одного нового рядка до існуючої матриці.
Взагалі ця постановка проблеми " додати одного до " відома як оновлення першої позиції . Посилання MathOverflow, яке надає @amoeba про " ефективне оновлення розкладу власного значення ", - це перший перший крок, якщо ви хочете почати заглиблюватися в справу; перший документ пропонує чітке вирішення вашого конкретного питання. Просто для уточнення, що означає перший ранг і другий ранг, щоб ви не плуталися, якщо ваш новий такий:A∗
A∗=A−uvT
uv
A∗=A−UVT
формула Вудбері входить в гру. Якщо ви побачите ці формули, ви помітите, що в них багато зворотного. Ви не вирішуєте це безпосередньо. Оскільки ви вже вирішили значну частину їх підсистем (тобто у вас вже було розраховано декомпозицію), ви використовуєте їх для отримання більш швидких та / або стабільніших оцінок. (Ось чому люди все ще досліджують цю сферу.) Я багато використовував книгу " Обчислювальна статистика " Дж. Дж. Ніжного як орієнтир; Я думаю, що гл. 5 Числова лінійна алгебра налаштує вас належним чином. (Класифікатор uber-classic: " Матрична алгебра з точки зору статистики " Харвіля на жаль не торкається оновлень рангів.)
Переглядаючи статистику / додаток до речей, оновлення першої позиції є поширеними в системах рекомендацій, оскільки в них можуть бути тисячі записів клієнтів і перерахування SVD (або будь-якого розкладу для цього питання) кожного разу, коли новий користувач реєструє або новий продукт є додані або видалені досить марнотратні (якщо не недосяжні). Зазвичай матриці системи рекомендацій є рідкими, і це робить алгоритми ще більш ефективними. Доступним першим документом є рукопис М. Бренда " Швидкі онлайн-версії SVD для легких систем рекомендацій ". Переходячи до щільних матриць, я думаю, що перегляд статей з розпізнавання візерунків та обробки зображень може привести вас досить далеко до отримання фактичного алгоритму використання. Наприклад, документи:
- Поступове вивчення двосторонніх основних компонентів для розпізнавання обличчя (2009) Реном та Даєм,
- Про інкрементальне та надійне підпросторове навчання (2003) від Li et al.
- Послідовне вилучення основи Кархунена-Льова та його застосування до зображень (2000) Леві та Лінденбаума.
- Інкрементальне навчання для надійного візуального відстеження (2007) від Ross et al.
всі, здається, вирішують одну і ту ж проблему в своїй основі; з'являються нові функції, і нам потрібно оновити представництво відповідно швидко . Зауважте, що ці матриці не є симетричними або навіть квадратними. Інша робота М. Бренда також може вирішити цю проблему (див. Статтю " Швидкі модифікації низького рангу розкладання тонкого сингулярного значення (2006) " - про це також згадується у посиланні MO, наведеному на початку публікації.) багато чудових робіт на цю тему, але більшість, як правило, є досить математичними (наприклад, доповідь Бенайча-Георгеса та Надакудіті на тему " Сингулярні значення та вектори збурень низького рангу великих прямокутних випадкових матриць (2012)") і я не думаю, що вони допоможуть отримати рішення незабаром. Я б запропонував вам зосередитись на літературі з обробки зображень.
На жаль, я не стикався з жодними R-реалізаціями для рутинних оновлень під рангом один. Відповідь на тему " Оновлена реалізація SVD в Python, C або Fortran? " Від Computational Science SE дає ряд реалізацій MATLAB та C ++, які ви можете розглянути. Зазвичай реалізація R, Python та ін. - це обгортки навколо реалізації C, C ++ або FORTRAN.
rank 1 updates
. Швидкі онлайн-версії SVD для легких систем рекомендування від фірми - це доступний перший документ. Я, на жаль, ще не бачив чогось для SVD, реалізованого в R. Холеські оновлення існують (updown
зMatrix
) завдяки CHOLMOD. Рідкість вашої матриці дійсно змінить ваше остаточне рішення; ви припускаєте щільну чи розріджену матрицю?