Фаза 01 · урок 11
Сингулярное разложение
Цель урока: У вас есть матрица 1000x2000. Возможно, это оценки фильмов пользователями. Возможно, таблица частот «документ—термин». Возможно, значения пикселей изображения. Вам нужно сжать её, убрать шум, найти в ней скрытую структуру или решить с…
Текущий релиз AlexBred.com: первые 100 уроков русскоязычной программы.
Содержание урока
- Цели обучения
- Проблема
- Концепция
- Что SVD делает геометрически
- Полное разложение
- Левые сингулярные векторы, сингулярные значения, правые сингулярные векторы
- Форма внешнего произведения
- Связь со спектральным разложением
- Усечённое SVD: низкоранговое приближение
- Сжатие изображений с помощью SVD
- SVD для рекомендательных систем
- SVD в NLP: латентно-семантический анализ
- SVD для подавления шума
- Псевдообратная матрица через SVD
- Преимущества численной устойчивости
- Связь с PCA
- Соберите сами
- Шаг 1: SVD с нуля с помощью степенного метода
- Шаг 2: Тестирование и сравнение с NumPy
- Шаг 3: Демонстрация сжатия изображения
- Шаг 4: Подавление шума
- Шаг 5: Псевдообратная матрица
- Примените
- Внедрите
- Упражнения
- Ключевые термины
- Дополнительные материалы
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
Из этой связи следуют три вещи:
- Сингулярные значения всегда вещественны и неотрицательны (это квадратные корни собственных значений положительно полуопределённой матрицы).
- SVD можно было бы вычислить через спектральное разложение A^T A, но это возводит число обусловленности в квадрат и снижает численную точность. Специализированные алгоритмы SVD этого избегают.
- Когда 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 в реальных проектах
Упражнения
-
Реализуйте полное SVD с нуля, не используя степенной метод. Вместо этого вычислите спектральное разложение A^T A, чтобы получить V и сингулярные значения, затем вычислите U = A V Sigma^{-1}. Сравните численную точность с вашей версией со степенным методом и с NumPy.
-
Загрузите реальное изображение в оттенках серого (или преобразуйте изображение в оттенки серого). Сожмите его на рангах 1, 5, 10, 25, 50, 100. Для каждого ранга вычислите степень сжатия и относительную ошибку. Найдите ранг, на котором изображение становится визуально приемлемым.
-
Постройте крошечную рекомендательную систему. Создайте матрицу оценок «пользователь—фильм» 10x8 с некоторыми известными элементами. Заполните пропущенные элементы средними значениями по строкам. Вычислите SVD и восстановите приближение ранга 3. Используйте восстановленную матрицу для предсказания пропущенных оценок. Проверьте, что предсказания разумны.
-
Создайте матрицу «документ—термин» 100x50 с 3 синтетическими темами. У каждой темы есть 5 связанных терминов. Добавьте шум. Примените SVD и убедитесь, что первые 3 сингулярных значения намного больше остальных. Спроецируйте документы в трёхмерное латентное пространство и проверьте, что документы одной темы кластеризуются вместе.
-
Сгенерируйте чистую низкоранговую матрицу (ранг 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. |
Дополнительные материалы
- Gilbert Strang: Linear Algebra and Its Applications, Chapter 7 — подробное изложение SVD с применениями
- 3Blue1Brown: But what is the SVD? — геометрическая интуиция о SVD
- We Recommend a Singular Value Decomposition — доступный обзор от Американского математического общества
- Netflix Prize and Matrix Factorization — исходная запись в блоге Саймона Фанка о SVD для рекомендаций
- Latent Semantic Analysis — исходное применение SVD в NLP
- Numerical Linear Algebra by Trefethen and Bau — эталонное руководство для понимания алгоритмов SVD и их численных свойств
Источник: Singular Value Decomposition — оригинал Навигация: назад: 01.10 — Понижение размерности: PCA, t-SNE, UMAP · Фаза 1 — Математические основы · Полный каталог · далее: 01.12 — Операции с тензорами.