행렬에 새 행을 하나 추가 한 후 SVD 분해 업데이트


17

SVD 분해 A = U S V withm × n 크기 의 밀도가 높은 행렬 가 있다고 가정합니다 . 에서 나는 SVD를 계산할 수 있습니다 다음과 같습니다 .Am×n

A=USV.
Rsvd(A)

새로운 번째 행이 A에 추가되면 SVD를 처음부터 다시 계산하지 않고 이전 행을 기반으로 새 SVD 분해를 계산할 수 있습니까 (예 : U , SV 사용 )?(m+1)AUSV


3
의 문헌을 확인하십시오 rank 1 updates. Brand의 경량 추천 시스템대한 빠른 온라인 SVD 개정판 은 액세스 가능한 첫 번째 논문입니다. 불행히도 R에서 이미 구현 된 SVD에 대해서는 보지 못했습니다. CHOLMOD 덕분에 Cholesky 업데이트가 ( updown부터 Matrix) 존재합니다 . 행렬 의 희소성 은 실제로 최종 솔루션과는 다릅니다. 밀도가 높거나 희소 행렬을 가정합니까? A
usεr11852는

2
+1 ~ @ usεr11852. 또한 QR을 업데이트하는 것이 훨씬 쉽고 표준 적이며 일부 응용 프로그램에서는 QR이 충분하며 실제로 SVD가 필요하지 않습니다. 따라서 응용 프로그램에 대해서도 생각하십시오.
amoeba는

예, 매트릭스는 밀도가 높습니다.
user1436187

1
추천 문헌을 '디치'하고 이미지 처리에 중점을 둡니다. 둘러보기와 비슷한 질문이 데이터베이스에 "새 이미지"라는 용어로 게시되었습니다. 예를 들어 제 직감에는 누군가 자신의 고유 페이스 항목을 온라인으로 업데이트하는 알고리즘이 있어야한다는 것입니다. 이 사람들은 밀도가 높은 행렬 표현으로 작업합니다.
usεr11852는

답변:


14

예, 기존 행렬에 새 행을 하나 추가 한 후 SVD 분해를 업데이트 할 수 있습니다.

일반적으로이 " 1 대 1 추가 "문제 공식은 순위 1 업데이트 라고 합니다 . @amoeba가 제공 한 " 고유 값 분해의 효율적인 순위 2 업데이트 "에 관한 MathOverflow 링크 는이 문제에 대해 더 깊이 조사하기를 원하는 첫 번째 단계입니다. 첫 번째 논문은 특정 질문에 대한 명확한 해결책을 제공합니다. 새로운 A

A=AuvT

uv

A=AUVT

우드 베리 공식은 놀이로 제공됩니다. 이 공식을 보면 많은 역수가 포함되어 있음을 알 수 있습니다. 직접 해결하지 마십시오. 이미 많은 하위 시스템을 이미 해결 했으므로 (즉, 일부 분해가 이미 계산 된 경우)이를 사용하여 더 빠르고 안정적인 추정값을 얻을 수 있습니다. (이것이 사람들이 여전히이 분야를 연구하는 이유입니다.) 저는 JE Gentle의 " 전산 통계 " 책을 참조로 많이 사용했습니다. 나는 Chapt을 생각한다. 5 수치 선형 대수 가 올바르게 설정됩니다. (Uber-classic : Harville " 통계학 자의 관점에서 얻은 매트릭스 대수 "는 불행히도 순위 업데이트를 전혀 다루지 않습니다.)

통계 / 애플리케이션 측면을 살펴보면, 추천 시스템에서 하나의 업데이트 순위가 일반적입니다. 하나는 새로운 사용자가 등록하거나 새로운 제품이 등록 될 때마다 수천 개의 고객 항목이 있고 SVD (또는 해당 문제에 대한 주어진 분해)를 다시 계산할 수 있기 때문입니다. 추가 또는 제거는 매우 낭비 적입니다 (달성 할 수없는 경우). 일반적으로 추천 시스템 매트릭스는 희소하므로 알고리즘이 훨씬 더 효율적입니다. 접근 가능한 첫 번째 논문은 M. Brand의 " 경량 추천 시스템을위한 빠른 온라인 SVD 개정 "원고입니다. 밀도가 높은 매트릭스로 가기 패턴 인식 및 이미징 프로세싱의 논문을 보면 실제 알고리즘을 사용하는 데 상당한 도움이 될 수 있다고 생각합니다. 예를 들어 논문 :

  1. Ren과 Dai의 얼굴 인식 (2009)위한 양방향 주요 구성 요소에 대한 증분 학습
  2. Li et al.의 점진적이고 강력한 부분 공간 학습 (2003)
  3. 순차 Karhunen-Loeve 기반 추출 및 Levey와 Lindenbaum의 이미지 (2000) 적용 .
  4. Ross et al.의 강력한 시각적 추적을위한 증분 학습 (2007) .

모두 핵심에서 같은 문제를 다루는 것 같습니다. 새로운 기능이 등장하고 있으며 그에 따라 표현을 빠르게 업데이트해야합니다 . 이 행렬은 대칭이거나 정사각형이 아닙니다. M. Brand의 또 다른 연구에서도이 문제를 해결할 수 있습니다 ( " 단수 단일 값 분해 (2006)의 빠른 하위 순위 수정 " ( 이 문서의 시작 부분에 제공된 MO 링크에도 언급) 참조). 주제에 대한 좋은 논문을 많이하지만 대부분은 (주로 수학 경향 예. "에 Benaych - Georgesa 및 Nadakuditi 종이 단수 값과 큰 직사각형 랜덤 행렬의 낮은 순위 교란의 벡터 (2012)")에 대한 답변이 곧 해결 될 것으로 생각하지 않습니다. 이미지 처리 관련 자료에 계속 집중하시기 바랍니다.

불행히도 순위 1 업데이트 루틴에 대한 R 구현을 보지 못했습니다. Computational Science SE의 " Python, C 또는 Fortran에서 업데이트 가능한 SVD 구현? " 에 대한 답변은 고려해야 할 여러 MATLAB 및 C ++ 구현을 제공합니다. 일반적으로 R, Python 등의 구현은 C, C ++ 또는 FORTRAN 구현에 대한 래퍼입니다.


6
이것은 좋은 논평이지만 질문에 대한 답을 찾지 못한 것에 실망했습니다. 그것은 밝혀 마태 복음 상표에 의하여 다른 종이 미주리 대답에 링크가, 명시 적 솔루션이 포함되어 있습니다.
whuber

5
귀하와 @whuber 모두에게 +1 (다른 SE 사이트에 제공된 정보를 "중복"하는 것은 피해야한다고 생각하지 않습니다! 사이트에 제공된 정보 를 자급 자족 해야한다고 주장합니다. 실제로 여기에 포함 된 거의 모든 정보는 기존의 교과서, 온라인 자료 또는 연구 논문을 복제하는 의미로 사용됩니다. 한 가지 질문 : 랭크 1 또는 상위 랭크 업데이트 후 역행렬이 어떻게 변하는 지 설명하는 셔먼-모리슨 (Sherman-Morrison) 및 우드버리 (Woodbury) 공식을 언급했습니다. SVD와 어떤 관계가 있습니까?
amoeba는

1
사람들을 해당 링크의 MO 페이지로 안내하려는 이유를 이해하지만 문제를 해결한다고 직접 언급 할 수도 있습니다. ( "좋은 첫 걸음"은 큰 과소 평가입니다.) 많은 논평은 아직 좋은 해결책을 찾지 못했다고 오해 될 수 있습니다.
whuber

1
@ whuber : "Good"이 "great"가되었고 이제 논문도 더 잘 언급 했습니까? :) (그런데 피드백 감사합니다.)
usεr11852 Reinstate Monic

2
역사를 위해서, Bunch와 Nielsen 은 SVD를 업데이트하고 다운 타임을하는 방법을 최초로 보여주었습니다. 사실상 브랜드의 방법은이 오래된 논문의 방법을 일반화합니다.
JM은 통계학자가 아닙니다
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.