Я пишу код для вычисления Classical Multidimensional Scaling (сокращенно МДС) в очень большой n
по n
матрицы, n = 500,000
в моем примере.Быстрые методы аппроксимации наивысшие 3 собственных значений и собственных векторов большой симметричной матрицы
За один шаг MDS, мне нужно вычислить самые высокие три цифры n
на n
матрицы. Эта матрица называется матрицей B
. Мне нужны только эти три собственных вектора и собственные значения. Общие методы вычисления собственных векторов и собственных значений большой матрицы занимают много времени, и я не требую очень точного ответа, поэтому я ищу оценку собственных векторов и собственных значений.
Некоторые параметры:
B
матрица symmetric, real и довольно dense- Собственное разложение
B
в теории всегда должны производить действительные числа. - Мне не нужна абсолютно точная оценка, просто быстрая. Мне нужно, чтобы он завершился через несколько часов.
- Я пишу в Python и C++
Мой вопрос: Есть ли быстрые методы оценки трех высших собственных векторов и собственных значений такого большого B
матрицы?
Прогресс: Я нашел method of approximating the highest eigenvalue of a matrix, но не знаю, могу ли я обобщить его на самые высокие три. Я также нашел this paper written in 1996, но для меня это чрезвычайно технично и трудно.
Матрица такого размера потребует больше, чем терабайт памяти с учетом 64-разрядных записей с плавающей запятой. Забудьте собственные векторы - даже выполнение одного умножения матрицы-вектора выглядит болезненным. –
Но нет необходимости хранить оригинальную матрицу! Это косвенно указано в алгоритме MDS, и вы можете использовать его для выполнения умножения матричных векторов без предварительного вычисления матрицы. –
Вы посмотрели примерный MDS, предназначенный для больших данных? Например. см. http://pike.cs.ucla.edu/~weiwang/paper/CIMCV06.pdf – Gene