Python: получить несортированный список особых значений из numpy / scipy svd - PullRequest
0 голосов
/ 03 мая 2019

У меня квадратная матрица, и я хочу использовать svd для уменьшения номера условия матрицы путем исключения некоторых строк / столбцов.

Я использовал numpy / scipy, чтобы получить отсортированный список значений в единственном числе.

Используя отсортированный список, я могу легко восстановить меньшую матрицу, отбросив некоторые небольшие сингулярные значения.Но сложно сопоставить с исходной матрицей то, какие значения были исключены, а какие сохранены.Мне нужно это далее.

Есть ли способ позже идентифицировать исходную матрицу, какие индексы были сохранены, а какие отброшены.

1 Ответ

0 голосов
/ 03 мая 2019

Чтобы выполнить разложение матрицы по сингулярному значению, вы можете посмотреть на модуль .linalg` в numpy.

SVD матрицы разлагает ее на произведение трех матриц:

M = U S V *

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

Примечание: np.linalg.svd не возвращает S , но s , который является просто одномерным массивом, содержащим значения единственного числа.

Практическая реализация

Допустим, у вас есть (m x q) пространство объектов, представленное 2D-массивом X, где X - центрированная матрица. Вы можете рассчитать его SVD:

U, s, Vt = np.linalg.svd(X)

, где t обозначает транспонирование V, а s - ваш «несортированный список единичных значений».

Вы можете затем спроецировать свое оригинальное пространство признаков на размеры n, используя сингулярные векторы и отбрасывая особые векторы, которые сохраняют наименьшую дисперсию:

X_projected = X.dot(Vt.T[:,:n])

где X_projected - теперь представление вашего пространственного объекта в нижнем n-мерном пространстве.

Важно, что вы можете вернуться из своего уменьшенного пространства функций в исходное пространство:

X_recovered = X_projected.dot(Vt[:,:n])

В частности, это можно использовать для измерения информации, потерянной в вашем сокращенном наборе функций, путем сравнения X_recovered с вашим исходным набором функций (X) для измерения таких вещей, как ошибка реконструкции.

...