Фаза 01 · урок 11

Сингулярное разложение

Цель урока: У вас есть матрица 1000x2000. Возможно, это оценки фильмов пользователями. Возможно, таблица частот «документ—термин». Возможно, значения пикселей изображения. Вам нужно сжать её, убрать шум, найти в ней скрытую структуру или решить с…

Текущий релиз AlexBred.com: первые 100 уроков русскоязычной программы.

Курс
AI Engineering from Scratch
Фаза
Математические основы
Чтение
19 мин.
Проверено
Содержание урока
  1. Цели обучения
  2. Проблема
  3. Концепция
  4. Что SVD делает геометрически
  5. Полное разложение
  6. Левые сингулярные векторы, сингулярные значения, правые сингулярные векторы
  7. Форма внешнего произведения
  8. Связь со спектральным разложением
  9. Усечённое SVD: низкоранговое приближение
  10. Сжатие изображений с помощью SVD
  11. SVD для рекомендательных систем
  12. SVD в NLP: латентно-семантический анализ
  13. SVD для подавления шума
  14. Псевдообратная матрица через SVD
  15. Преимущества численной устойчивости
  16. Связь с PCA
  17. Соберите сами
  18. Шаг 1: SVD с нуля с помощью степенного метода
  19. Шаг 2: Тестирование и сравнение с NumPy
  20. Шаг 3: Демонстрация сжатия изображения
  21. Шаг 4: Подавление шума
  22. Шаг 5: Псевдообратная матрица
  23. Примените
  24. Внедрите
  25. Упражнения
  26. Ключевые термины
  27. Дополнительные материалы

SVD — швейцарский нож линейной алгебры. Оно есть у каждой матрицы. Оно нужно каждому специалисту по данным.

Тип: Сборка Языки: Python, Julia Предварительные требования: Фаза 1, уроки 01 («Интуитивное понимание линейной алгебры»), 02 («Векторы, матрицы и операции»), 03 («Преобразования матриц») Время: ~120 минут

Цели обучения

  • Реализовать SVD с помощью степенного метода и объяснить геометрический смысл U, Sigma и V^T
  • Применить усечённое SVD для сжатия изображений и измерить степень сжатия относительно ошибки восстановления
  • Вычислить псевдообратную матрицу Мура — Пенроуза с помощью SVD для решения переопределённых систем наименьших квадратов
  • Связать SVD с PCA, рекомендательными системами (латентными факторами) и латентно-семантическим анализом в NLP

Проблема

У вас есть матрица 1000x2000. Возможно, это оценки фильмов пользователями. Возможно, таблица частот «документ—термин». Возможно, значения пикселей изображения. Вам нужно сжать её, убрать шум, найти в ней скрытую структуру или решить с её помощью систему наименьших квадратов. Спектральное разложение работает только для квадратных матриц. И даже тогда оно требует, чтобы у матрицы был полный набор линейно независимых собственных векторов.

SVD работает с любой матрицей. Любой формы. Любого ранга. Без условий. Оно раскладывает матрицу на три множителя, раскрывающих геометрию того, как матрица преобразует пространство. Это самое общее и самое полезное разложение во всей линейной алгебре.

Концепция

Что SVD делает геометрически

Каждая матрица, независимо от формы, последовательно выполняет три операции: поворот, масштабирование, поворот. SVD делает это разложение явным.

A = U * Sigma * V^T

      m x n       m x m        m x n            n x n
  (любая)    (поворот)  (масштабирование)  (поворот)

Для любой матрицы A SVD раскладывает её на:

  • V^T поворачивает векторы во входном пространстве (n-мерном)
  • Sigma масштабирует вдоль каждой оси (растягивает или сжимает)
  • U поворачивает результат в выходное пространство (m-мерное)

Диаграмма к уроку «Сингулярное разложение»

Представьте это так. Вы передаёте SVD матрицу. Оно говорит вам: «Эта матрица берёт сферу входных данных, сначала поворачивает её V^T, затем растягивает в эллипсоид с помощью Sigma, после чего поворачивает эллипсоид U». Сингулярные значения — это длины осей эллипсоида.

Полное разложение

Для матрицы A формы m x n:

A = U * Sigma * V^T

где:
  U     имеет размер m x m, ортогональна (U^T U = I)
  Sigma имеет размер m x n, диагональна (сингулярные значения на диагонали)
  V     имеет размер n x n, ортогональна (V^T V = I)

Сингулярные значения sigma_1 >= sigma_2 >= ... >= sigma_r > 0
где r = rank(A)

Столбцы U называются левыми сингулярными векторами. Столбцы V называются правыми сингулярными векторами. Диагональные элементы Sigma называются сингулярными значениями. Они всегда неотрицательны и по соглашению отсортированы по убыванию.

Левые сингулярные векторы, сингулярные значения, правые сингулярные векторы

Каждый компонент SVD имеет отдельный геометрический смысл.

Правые сингулярные векторы (столбцы V): образуют ортонормированный базис входного пространства (R^n). Это направления во входном пространстве, которые матрица отображает в ортогональные направления выходного пространства. Считайте их естественной системой координат области определения.

Сингулярные значения (диагональ Sigma): это коэффициенты масштабирования. i-е сингулярное значение показывает, насколько матрица растягивает векторы вдоль i-го правого сингулярного вектора. Нулевое сингулярное значение означает, что матрица полностью сжимает это направление.

Левые сингулярные векторы (столбцы U): образуют ортонормированный базис выходного пространства (R^m). i-й левый сингулярный вектор — направление в выходном пространстве, куда попадает i-й правый сингулярный вектор (после масштабирования).

Их связь:

A * v_i = sigma_i * u_i

Матрица A берёт i-й правый сингулярный вектор v_i,
масштабирует его на sigma_i и отображает в i-й левый сингулярный вектор u_i.

Это даёт покоординатную картину того, что делает любая матрица.

Форма внешнего произведения

SVD можно записать как сумму матриц ранга 1:

A = sigma_1 * u_1 * v_1^T + sigma_2 * u_2 * v_2^T + ... + sigma_r * u_r * v_r^T

Каждый член sigma_i * u_i * v_i^T — матрица ранга 1 (внешнее произведение).
Полная матрица — сумма r таких матриц, где r — ранг.

Эта форма лежит в основе низкорангового приближения. Каждый член добавляет один слой структуры. Первый член захватывает единственный наиболее важный паттерн. Второй — следующий по важности. И так далее. Усечение этой суммы даёт наилучшее возможное приближение при любом заданном ранге.

Приближение ранга 1:    A_1 = sigma_1 * u_1 * v_1^T
                         (захватывает доминирующий паттерн)

Приближение ранга 2:    A_2 = sigma_1 * u_1 * v_1^T + sigma_2 * u_2 * v_2^T
                         (захватывает два наиболее важных паттерна)

Приближение ранга k:    A_k = сумма первых k членов
                         (оптимально по теореме Эккарта — Янга)

Связь со спектральным разложением

SVD и спектральное разложение тесно связаны. Сингулярные значения и векторы A непосредственно получаются из собственных значений и собственных векторов A^T A и A A^T.

A^T A = V * Sigma^T * U^T * U * Sigma * V^T
      = V * Sigma^T * Sigma * V^T
      = V * D * V^T

где D = Sigma^T * Sigma — диагональная матрица с sigma_i^2 на диагонали.

Следовательно:
- Правые сингулярные векторы (V) — собственные векторы A^T A
- Квадраты сингулярных значений (sigma_i^2) — собственные значения A^T A

Аналогично:
A A^T = U * Sigma * V^T * V * Sigma^T * U^T
      = U * Sigma * Sigma^T * U^T

Следовательно:
- Левые сингулярные векторы (U) — собственные векторы A A^T
- Собственные значения A A^T также равны sigma_i^2

Из этой связи следуют три вещи:

  1. Сингулярные значения всегда вещественны и неотрицательны (это квадратные корни собственных значений положительно полуопределённой матрицы).
  2. SVD можно было бы вычислить через спектральное разложение A^T A, но это возводит число обусловленности в квадрат и снижает численную точность. Специализированные алгоритмы SVD этого избегают.
  3. Когда A квадратная и симметричная положительно полуопределённая, SVD и спектральное разложение совпадают.

Усечённое SVD: низкоранговое приближение

Теорема Эккарта — Янга — Мирского утверждает, что наилучшее приближение A ранга k (как в норме Фробениуса, так и в спектральной норме) получается сохранением только k наибольших сингулярных значений и соответствующих им векторов:

A_k = U_k * Sigma_k * V_k^T

где:
  U_k     имеет размер m x k  (первые k столбцов U)
  Sigma_k имеет размер k x k  (верхний левый блок Sigma размера k x k)
  V_k     имеет размер n x k  (первые k столбцов V)

Ошибка приближения = sigma_{k+1}  (в спектральной норме)
                   = sqrt(sigma_{k+1}^2 + ... + sigma_r^2)  (в норме Фробениуса)

Это не просто «хорошее» приближение. Доказано, что оно является наилучшим возможным приближением ранга k. Никакая другая матрица ранга k не ближе к A.

Компонент Относительная величина Оставлен в приближении ранга 3?
sigma_1 Наибольшая Да
sigma_2 Большая Да
sigma_3 Средне-большая Да
sigma_4 Средняя Нет (ошибка)
sigma_5 Средне-малая Нет (ошибка)
sigma_6 Малая Нет (ошибка)
sigma_7 Очень малая Нет (ошибка)
sigma_8 Крошечная Нет (ошибка)

Оставляем первые 3: A_3 захватывает три наибольших сингулярных значения. Ошибка = оставшиеся значения (sigma_4 — sigma_8).

Если сингулярные значения быстро убывают, малое k захватывает большую часть матрицы. Если они убывают медленно, у матрицы нет низкоранговой структуры.

Сжатие изображений с помощью SVD

Изображение в оттенках серого — это матрица интенсивностей пикселей. Изображение 800x600 содержит 480 000 значений. SVD позволяет приблизить его значительно меньшим числом значений.

Исходное изображение: 800 x 600 = 480 000 значений

SVD с рангом k:
  U_k:      800 x k значений
  Sigma_k:  k значений
  V_k:      600 x k значений
  Всего:    k * (800 + 600 + 1) = k * 1401 значений

  k=10:   14 010 значений   (2,9% от исходного)
  k=50:   70 050 значений  (14,6% от исходного)
  k=100: 140 100 значений  (29,2% от исходного)

  Степень сжатия растёт при уменьшении k,
  но визуальное качество ухудшается.

Ключевая идея: у естественных изображений сингулярные значения быстро убывают. Первые несколько значений захватывают общую структуру (формы, градиенты). Последующие захватывают мелкие детали и шум. Усечение до ранга 50 часто даёт изображение, которое выглядит почти идентично исходному, но занимает на 85% меньше места.

SVD для рекомендательных систем

Netflix Prize сделал этот подход известным. У вас есть матрица оценок «пользователь—фильм», в которой пропущено большинство элементов.

             Movie1  Movie2  Movie3  Movie4  Movie5
  User1      [  5      ?       3       ?       1  ]
  User2      [  ?      4       ?       2       ?  ]
  User3      [  3      ?       5       ?       ?  ]
  User4      [  ?      ?       ?       4       3  ]

  ? = неизвестная оценка

Идея в том, что эта матрица оценок имеет низкий ранг. У пользователей не полностью независимые вкусы. Есть несколько латентных факторов (боевик или драма, старое или новое, интеллектуальное или эмоциональное), объясняющих большинство предпочтений.

SVD заполненной матрицы оценок разлагает её на:

  • U: профили пользователей в пространстве латентных факторов
  • Sigma: важность каждого латентного фактора
  • V^T: профили фильмов в пространстве латентных факторов

Предсказанная для фильма оценка пользователя — скалярное произведение его профиля пользователя и профиля фильма (взвешенное сингулярными значениями). Низкоранговое приближение заполняет пропущенные элементы.

На практике используются варианты, такие как инкрементальное SVD Саймона Фанка или ALS (чередующиеся наименьшие квадраты), которые обрабатывают пропущенные данные напрямую. Но основная идея та же: разложение на латентные факторы через SVD.

SVD в NLP: латентно-семантический анализ

Латентно-семантический анализ (Latent Semantic Analysis, LSA), также называемый латентным семантическим индексированием (Latent Semantic Indexing, LSI), применяет SVD к матрице «термин—документ».

             Doc1   Doc2   Doc3   Doc4
  "cat"      [  3      0      1      0  ]
  "dog"      [  2      0      0      1  ]
  "fish"     [  0      4      1      0  ]
  "pet"      [  1      1      1      1  ]
  "ocean"    [  0      3      0      0  ]

После SVD с рангом k=2:

  Каждый документ становится точкой в двумерном «пространстве концепций».
  Каждый термин становится точкой в том же двумерном пространстве.
  Документы на похожие темы кластеризуются вместе.
  Термины с похожим значением кластеризуются вместе.

  "cat" и "dog" оказываются рядом друг с другом (наземные питомцы).
  "fish" и "ocean" оказываются рядом друг с другом (водные концепции).
  Doc1 и Doc3 кластеризуются, если у них похожие темы.

LSA был одним из первых успешных методов извлечения семантической близости из необработанного текста. Он работает, потому что синонимичные термины обычно появляются в похожих документах, поэтому SVD группирует их в одни и те же латентные измерения. Современные векторные представления слов (Word2Vec, GloVe) можно считать потомками этой идеи.

SVD для подавления шума

В зашумлённых данных сигнал сосредоточен в наибольших сингулярных значениях, а шум распределён по всем сингулярным значениям. Усечение удаляет уровень шума.

Сингулярные значения чистого сигнала:

Компонент Величина Тип
sigma_1 Очень большая Сигнал
sigma_2 Большая Сигнал
sigma_3 Средняя Сигнал
sigma_4 Близка к нулю Пренебрежимо мала
sigma_5 Близка к нулю Пренебрежимо мала

Сингулярные значения зашумлённого сигнала (шум добавляется ко всем):

Компонент Величина Тип
sigma_1 Очень большая Сигнал
sigma_2 Большая Сигнал
sigma_3 Средняя Сигнал
sigma_4 Малая Шум
sigma_5 Малая Шум
sigma_6 Малая Шум
sigma_7 Малая Шум

Диаграмма к уроку «Сингулярное разложение»

Это используется в обработке сигналов, научных измерениях и очистке данных. Всякий раз, когда у вас есть матрица, повреждённая аддитивным шумом, усечённое SVD даёт принципиальный способ отделить сигнал от шума.

Псевдообратная матрица через SVD

Псевдообратная матрица Мура — Пенроуза A+ обобщает обращение матриц на неквадратные и вырожденные матрицы. SVD делает её вычисление тривиальным.

Если A = U * Sigma * V^T, то:

A+ = V * Sigma+ * U^T

где Sigma+ образуется так:
  1. Транспонируйте Sigma (поменяйте строки и столбцы местами)
  2. Замените каждый ненулевой диагональный элемент sigma_i на 1/sigma_i
  3. Оставьте нули нулями

Для A (m x n):      A+ имеет размер (n x m)
Для Sigma (m x n):  Sigma+ имеет размер (n x m)

Псевдообратная матрица решает задачи наименьших квадратов. Если Ax = b не имеет точного решения (переопределённая система), то x = A+ b — решение наименьших квадратов (минимизирует ||Ax - b||).

Переопределённая система (уравнений больше, чем неизвестных):

  [1  1]         [3]
  [2  1] x   =   [5]       Точного решения не существует.
  [3  1]         [6]

  x_ls = A+ b = V * Sigma+ * U^T * b

  Это даёт x, минимизирующий сумму квадратов остатков.
  Тот же результат, что и нормальные уравнения (A^T A)^(-1) A^T b,
  но численно более устойчивый.

Преимущества численной устойчивости

Вычисление спектрального разложения A^T A возводит сингулярные значения в квадрат (собственные значения A^T A равны sigma_i^2). Это возводит число обусловленности в квадрат, усиливая численные ошибки.

Пример:
  A имеет сингулярные значения [1000, 1, 0.001]
  Число обусловленности A: 1000 / 0.001 = 10^6

  A^T A имеет собственные значения [10^6, 1, 10^{-6}]
  Число обусловленности A^T A: 10^6 / 10^{-6} = 10^{12}

  Прямое вычисление SVD: работает с числом обусловленности 10^6
  Вычисление через A^T A:  работает с числом обусловленности 10^{12}
                           (теряется 6 дополнительных цифр точности)

Современные алгоритмы SVD (бидиагонализация Голуба — Кахана) работают напрямую с A, никогда не формируя A^T A. Поэтому всегда следует предпочитать np.linalg.svd(A) вместо np.linalg.eig(A.T @ A).

Связь с PCA

PCA ЕСТЬ SVD для центрированных данных. Это не аналогия. Это буквально одно и то же вычисление.

Дана центрированная матрица данных X (n_samples x n_features) (вычтено среднее):

Ковариационная матрица: C = (1/(n-1)) * X^T X

PCA находит собственные векторы C. Но:

  X = U * Sigma * V^T    (SVD матрицы X)

  X^T X = V * Sigma^2 * V^T

  C = (1/(n-1)) * V * Sigma^2 * V^T

Следовательно, главные компоненты — это в точности правые сингулярные векторы V.
Объяснённая дисперсия каждого компонента равна sigma_i^2 / (n-1).

В sklearn PCA реализовано с помощью SVD, а не спектрального разложения.
Это быстрее и численно устойчивее.

Это означает, что всё, что вы узнали о понижении размерности в уроке 10, внутри использует SVD. PCA — наиболее распространённое применение SVD в машинном обучении.

svd-rank-reconstruction

Соберите сами

Шаг 1: SVD с нуля с помощью степенного метода

Идея: чтобы найти наибольшее сингулярное значение и его векторы, используйте степенной метод для A^T A (или A A^T). Затем вычтите найденный компонент из матрицы и повторите для следующего сингулярного значения.

import numpy as np

def power_iteration(M, num_iters=100):
    n = M.shape[1]
    v = np.random.randn(n)
    v = v / np.linalg.norm(v)

    for _ in range(num_iters):
        Mv = M @ v
        v = Mv / np.linalg.norm(Mv)

    eigenvalue = v @ M @ v
    return eigenvalue, v

def svd_from_scratch(A, k=None):
    m, n = A.shape
    if k is None:
        k = min(m, n)

    sigmas = []
    us = []
    vs = []

    A_residual = A.copy().astype(float)

    for _ in range(k):
        AtA = A_residual.T @ A_residual
        eigenvalue, v = power_iteration(AtA, num_iters=200)

        if eigenvalue < 1e-10:
            break

        sigma = np.sqrt(eigenvalue)
        u = A_residual @ v / sigma

        sigmas.append(sigma)
        us.append(u)
        vs.append(v)

        A_residual = A_residual - sigma * np.outer(u, v)

    U = np.column_stack(us) if us else np.empty((m, 0))
    S = np.array(sigmas)
    V = np.column_stack(vs) if vs else np.empty((n, 0))

    return U, S, V

Шаг 2: Тестирование и сравнение с NumPy

np.random.seed(42)
A = np.random.randn(5, 4)

U_ours, S_ours, V_ours = svd_from_scratch(A)
U_np, S_np, Vt_np = np.linalg.svd(A, full_matrices=False)

print("Our singular values:", np.round(S_ours, 4))
print("NumPy singular values:", np.round(S_np, 4))

A_reconstructed = U_ours @ np.diag(S_ours) @ V_ours.T
print(f"Reconstruction error: {np.linalg.norm(A - A_reconstructed):.8f}")

Шаг 3: Демонстрация сжатия изображения

def compress_image_svd(image_matrix, k):
    U, S, Vt = np.linalg.svd(image_matrix, full_matrices=False)
    compressed = U[:, :k] @ np.diag(S[:k]) @ Vt[:k, :]
    return compressed

image = np.random.seed(42)
rows, cols = 200, 300
image = np.random.randn(rows, cols)

for k in [1, 5, 10, 20, 50]:
    compressed = compress_image_svd(image, k)
    error = np.linalg.norm(image - compressed) / np.linalg.norm(image)
    original_size = rows * cols
    compressed_size = k * (rows + cols + 1)
    ratio = compressed_size / original_size
    print(f"k={k:>3d}  error={error:.4f}  storage={ratio:.1%}")

Шаг 4: Подавление шума

np.random.seed(42)
clean = np.outer(np.sin(np.linspace(0, 4*np.pi, 100)),
                 np.cos(np.linspace(0, 2*np.pi, 80)))
noise = 0.3 * np.random.randn(100, 80)
noisy = clean + noise

U, S, Vt = np.linalg.svd(noisy, full_matrices=False)
denoised = U[:, :5] @ np.diag(S[:5]) @ Vt[:5, :]

print(f"Noisy error:    {np.linalg.norm(noisy - clean):.4f}")
print(f"Denoised error: {np.linalg.norm(denoised - clean):.4f}")
print(f"Improvement:    {(1 - np.linalg.norm(denoised - clean) / np.linalg.norm(noisy - clean)):.1%}")

Шаг 5: Псевдообратная матрица

A = np.array([[1, 1], [2, 1], [3, 1]], dtype=float)
b = np.array([3, 5, 6], dtype=float)

U, S, Vt = np.linalg.svd(A, full_matrices=False)
S_inv = np.diag(1.0 / S)
A_pinv = Vt.T @ S_inv @ U.T

x_svd = A_pinv @ b
x_lstsq = np.linalg.lstsq(A, b, rcond=None)[0]
x_pinv = np.linalg.pinv(A) @ b

print(f"SVD pseudoinverse solution:  {x_svd}")
print(f"np.linalg.lstsq solution:   {x_lstsq}")
print(f"np.linalg.pinv solution:    {x_pinv}")

Примените

Полные рабочие демонстрации находятся в code/svd.py. Запустите его, чтобы увидеть применение SVD к сжатию изображений, рекомендательным системам, латентно-семантическому анализу и подавлению шума.

python svd.py

Версия на Julia в code/svd.jl демонстрирует те же понятия с помощью встроенной функции Julia svd() и пакета LinearAlgebra.

julia svd.jl

Внедрите

Этот урок создаёт:

  • outputs/skill-svd.md - навык, объясняющий, когда и как применять SVD в реальных проектах

Упражнения

  1. Реализуйте полное SVD с нуля, не используя степенной метод. Вместо этого вычислите спектральное разложение A^T A, чтобы получить V и сингулярные значения, затем вычислите U = A V Sigma^{-1}. Сравните численную точность с вашей версией со степенным методом и с NumPy.

  2. Загрузите реальное изображение в оттенках серого (или преобразуйте изображение в оттенки серого). Сожмите его на рангах 1, 5, 10, 25, 50, 100. Для каждого ранга вычислите степень сжатия и относительную ошибку. Найдите ранг, на котором изображение становится визуально приемлемым.

  3. Постройте крошечную рекомендательную систему. Создайте матрицу оценок «пользователь—фильм» 10x8 с некоторыми известными элементами. Заполните пропущенные элементы средними значениями по строкам. Вычислите SVD и восстановите приближение ранга 3. Используйте восстановленную матрицу для предсказания пропущенных оценок. Проверьте, что предсказания разумны.

  4. Создайте матрицу «документ—термин» 100x50 с 3 синтетическими темами. У каждой темы есть 5 связанных терминов. Добавьте шум. Примените SVD и убедитесь, что первые 3 сингулярных значения намного больше остальных. Спроецируйте документы в трёхмерное латентное пространство и проверьте, что документы одной темы кластеризуются вместе.

  5. Сгенерируйте чистую низкоранговую матрицу (ранг 3, размер 50x40) и добавьте гауссов шум разных уровней (sigma = 0.1, 0.5, 1.0, 2.0). Для каждого уровня шума найдите оптимальный ранг усечения, перебирая k от 1 до 40 и измеряя ошибку восстановления относительно чистой матрицы. Постройте график того, как оптимальный k меняется с уровнем шума.

Ключевые термины

Термин Как обычно говорят Что это на самом деле означает
SVD «Разложить любую матрицу» Разложить A на U Sigma V^T, где U и V ортогональны, а Sigma диагональна с неотрицательными элементами. Работает с любой матрицей любой формы.
Сингулярное значение «Насколько важен этот компонент» i-й диагональный элемент Sigma. Показывает, насколько матрица растягивает вдоль i-го главного направления. Всегда неотрицательно и отсортировано по убыванию.
Левый сингулярный вектор «Выходное направление» Столбец U. Направление в выходном пространстве, в которое отображается i-й правый сингулярный вектор (после масштабирования на sigma_i).
Правый сингулярный вектор «Входное направление» Столбец V. Направление во входном пространстве, которое матрица отображает в i-й левый сингулярный вектор (после масштабирования на sigma_i).
Усечённое SVD «Низкоранговое приближение» Сохраняет только k наибольших сингулярных значений и их векторы. Даёт доказуемо наилучшее приближение исходной матрицы ранга k (теорема Эккарта — Янга).
Ранг «Истинная размерность» Число ненулевых сингулярных значений. Показывает, сколько независимых направлений действительно использует матрица.
Псевдообратная матрица «Обобщённая обратная» V Sigma+ U^T. Обращает ненулевые сингулярные значения, оставляет нули нулями. Решает задачи наименьших квадратов для неквадратных или вырожденных матриц.
Число обусловленности «Насколько чувствительна к ошибкам» sigma_max / sigma_min. Большое число обусловленности означает, что малые изменения входа вызывают большие изменения выхода. SVD показывает это напрямую.
Латентный фактор «Скрытая переменная» Измерение в низкоранговом пространстве, найденное SVD. В рекомендациях латентный фактор может соответствовать предпочтению жанра. В NLP — теме.
Норма Фробениуса «Общий размер матрицы» Квадратный корень из суммы квадратов элементов. Равен квадратному корню из суммы квадратов сингулярных значений. Используется для измерения ошибки приближения.
Теорема Эккарта — Янга «SVD даёт наилучшее сжатие» Для любого целевого ранга k усечённое SVD минимизирует ошибку приближения среди всех возможных матриц ранга k.
Степенной метод «Найти наибольший собственный вектор» Многократно умножает случайный вектор на матрицу и нормализует. Сходится к собственному вектору с наибольшим собственным значением. Основной элемент многих алгоритмов SVD.

Дополнительные материалы


Источник: Singular Value Decomposition — оригинал Навигация: назад: 01.10 — Понижение размерности: PCA, t-SNE, UMAP · Фаза 1 — Математические основы · Полный каталог · далее: 01.12 — Операции с тензорами.