Идея SVD и смена системы координат
Любое линейное преобразование — это поворот, затем масштабирование вдоль осей, затем ещё поворот: в этом суть SVD.
Сингулярное разложение (SVD) представляет любую матрицу как произведение трёх простых преобразований: $A = U \Sigma V^{T}$ — поворот, масштабирование осей и ещё поворот.
Завершим курс двумя обобщающими идеями. Первая — SVD, универсальное разложение, лежащее в основе сжатия изображений и рекомендательных систем. Вторая — смена системы координат, объясняющая, почему один вектор имеет разные координаты в разных базисах. Обе опираются на всё, что мы прошли.
SVD как три действия
SVD утверждает: что бы матрица $A$ ни делала с пространством, это раскладывается на три шага. Сначала поворот ($V^{T}$), затем растяжение вдоль осей на сингулярные числа $\sigma_1 \ge \sigma_2 \ge \dots$ (матрица $\Sigma$), затем ещё поворот ($U$).
$$A = U \, \Sigma \, V^{T}$$
Сингулярные числа $\sigma_i$ ранжируют направления по «важности»: большое $\sigma$ — направление, вдоль которого преобразование тянет сильно. Идея сжатия: оставить только несколько самых больших $\sigma$, отбросив мелкие, — так картинка или таблица данных приближается малым числом чисел почти без потери качества.
Смена координат
Один и тот же вектор в разных базисах записывается разными координатами. Если столбцы матрицы $P$ — это новые базисные векторы, то координаты $\vec{x}_{\text{нов}}$ в новом базисе связаны со старыми $\vec{x}_{\text{стар}}$ через $\vec{x}_{\text{стар}} = P\,\vec{x}_{\text{нов}}$, а обратно — через умножение на $P^{-1}$.
def det2(M):
return M[0][0] * M[1][1] - M[0][1] * M[1][0]
def inv2(M):
d = det2(M)
a, b = M[0]; c, dd = M[1]
return [[dd / d, -b / d], [-c / d, a / d]]
def matvec(A, v):
return [sum(A[i][j] * v[j] for j in range(len(v)))
for i in range(len(A))]
# новый базис: столбцы P
P = [[1, 1], [1, -1]] # e1'=(1,1), e2'=(1,-1)
x_old = [5, 6] # вектор в стандартных координатах
x_new = matvec(inv2(P), x_old)
print("координаты в новом базисе:", [round(v, 4) for v in x_new])Вывод:
координаты в новом базисе: [5.5, -0.5]
Замкнули круг
Координаты $(5{,}5;\, -0{,}5)$ — ровно те, что мы вручную нашли в уроке про линейные комбинации. Тогда мы решали систему «в лоб», теперь — через умножение на обратную матрицу базиса $P^{-1}$. Это и есть формальный механизм смены системы координат, и он опирается на обратную матрицу из шестого раздела.
Как работает под капотом
SVD существует для любой матрицы — даже неквадратной, в отличие от разложения по собственным векторам, которое есть не всегда. Сингулярные числа $\sigma_i$ — это корни из собственных значений матрицы $A^{T}A$, поэтому SVD тесно связан с темой собственных значений. Смена координат через $P^{-1}$ объясняет глубокий факт: одно и то же преобразование в разных базисах записывается разными матрицами, связанными формулой $A' = P^{-1} A P$ (подобные матрицы). А диагонализация из раздела про собственные значения — это как раз выбор такого базиса, в котором матрица преобразования становится диагональной. Так все темы курса смыкаются в единую картину.
Частые ошибки
- Считать, что SVD есть только у квадратных матриц. На самом деле сингулярное разложение существует для матриц любого размера.
- Путать направление смены координат. Чтобы получить координаты в базисе $P$, умножают на $P^{-1}$, а не на $P$.
- Думать, что у вектора «настоящие» координаты только в стандартном базисе. Координаты всегда относительны выбранного базиса — стандартный лишь привычнее.
Итог
- SVD раскладывает любую матрицу на поворот, масштаб и поворот: $A = U\Sigma V^{T}$.
- Сингулярные числа ранжируют направления; отбросив малые, получаем сжатие данных.
- Смена координат: $\vec{x}_{\text{нов}} = P^{-1}\vec{x}_{\text{стар}}$, где столбцы $P$ — новый базис.
- Подобные матрицы $A' = P^{-1}AP$ описывают одно преобразование в разных базисах; диагонализация — удачный выбор базиса.