SVD с NumPy - интерпретация результатов - PullRequest
0 голосов
/ 20 декабря 2018

Я пытаюсь попасть в разложение по сингулярным значениям (SVD).Я нашел эту YouTube Lecture , которая содержит пример.Тем не менее, когда я пробую этот пример в numpy, я получаю «разные» результаты.В этом примере входная матрица равна

A = [ [1,1,1,0,0], [3,3,3,0,0], [4,4,4,0,0], [5,5,5,0,0], [0,2,0,4,4], [0,0,0,5,5], [0,1,0,2,2] ]
A = np.asarray(A)
print(A)

[[1 1 1 0 0]
 [3 3 3 0 0]
 [4 4 4 0 0]
 [5 5 5 0 0]
 [0 2 0 4 4]
 [0 0 0 5 5]
 [0 1 0 2 2]]

Ранг этой матрицы равен 3 (np.linalg.matrix_rank(A)).В лекции говорится, что число сингулярных значений является рангом матрицы, и в этом примере сигма-матрица S действительно имеет размер 3 = 3.Однако при выполнении

U, S, V = np.linalg.svd(A)

матрица S содержит 5 значений.С другой стороны, первые 3 значения соответствуют одному в примере, а другие 2 в основном равны 0. Могу ли я предположить, что получим больше сингулярных значений, чем ранг, из-за численного алгоритма SVD и конечного представления действительных чиселна компьютерах - или что-то в этом роде?

1 Ответ

0 голосов
/ 20 декабря 2018

Как упоминалось на этой странице, numpy внутренне использует подпрограмму LAPACK _gesdd для получения декомпозиции SVD.Теперь, если вы видите _gesdd документацию , там упоминается:

Чтобы найти SVD общей матрицы A, вызовите подпрограмму LAPACK? Gebrd или? Gbbrd для уменьшения Aв двуугольную матрицу B путем унитарного (ортогонального) преобразования: A = QBPH.Затем вызовите? Bdsqr, который формирует SVD бидиагональной матрицы: B = U1ΣV1H.

Итак, здесь задействованы 2 шага:

  • Двуугольное преобразование с помощью ортогонального преобразования (Преобразования домохозяев)
  • Получите SVD двухдиагональной матрицы, используя неявный QR-алгоритм с нулевым смещением.

QR-алгоритм является итеративным, то есть вы не получите "точного"«отвечайте, но получайте все более и более приближенные значения с каждой итерацией и останавливайтесь, если изменение значений падает ниже порогового значения, поэтому оно является« приблизительным »в этом смысле.

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

...