4.9 Спектральные методы и матричные разложения

В предыдущем параграфе мы изучили геометрию пространств признаков: нормы, расстояния, углы и проекции.

Теперь мы поднимемся на уровень выше и рассмотрим структуру этих пространств — с помощью спектральных методов и разложений матриц. Они играют центральную роль в машинном обучении, так как позволяют:

  • понять внутреннее устройство данных;
  • находить направления наибольшей изменчивости;
  • решать задачи регрессии и классификации эффективно и устойчиво;
  • понижать размерность без значительных потерь информации;
  • сжимать изображения и другие сигналы;
  • быстро решать линейные системы уравнений.

В этом параграфе мы обсудим:

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

Давайте приступим!

Собственные значения и векторы, диагонализация, спектральный радиус

Допустим, у нас есть некая квадратная матрица . Вы уже успели ознакомиться с правилами умножения матриц и векторов. И вам точно известно, что если умножить матрицу на вектор, то на выходе мы получим вектор того же размера, на который мы производим умножение матрицы (при соблюдении размерностей для умножения, разумеется):

Для любой квадратной матрицы над комплексными числами существует минимум один такой ненулевой вектор, при умножении данной матрицы на который получается ровно тот же вектор, умноженный на некоторую константу:

Такой вектор называется собственным вектором данной матрицы . А константа называется собственным значением или собственным числом данной матрицы .

💡Собственный вектор — это такой вектор, который сохраняет своё направление при действии матрицы, а собственное значение показывает, во сколько раз он при этом растягивается или сжимается.

Чтобы найти собственные значения и векторы матрицы , нужно:

Шаг №1. Составить характеристическое уравнение:

Это полиномиальное уравнение степени , где — собственное значение.

Подробнее про характеристическое уравнение

При изучении собственных значений и собственных векторов центральную роль играет характеристическое уравнение. Оно задаёт условие, при котором у квадратной матрицы существует ненулевой вектор , такой что

где — скаляр (собственное значение), а — соответствующий собственный вектор.

Исходное определение можно переписать так:

где — единичная матрица такого же размера, что и . Для такой системы ненулевое решение существует только в том случае, если матрица необратима. А матрица необратима тогда и только тогда, когда её определитель равен нулю:

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

Смысл характеристического уравнения состоит в том, что оно описывает все такие значения , при которых матрица теряет обратимость, а линейное отображение имеет ненулевые направления, которые масштабируются в точности в раз. Каждое собственное значение соответствует по крайней мере одному собственному вектору, направление которого не меняется при действии матрицы — лишь масштабируется его длина. Далее в ходе текущего параграфа мы об этом поговорим подробнее.

Шаг №2. Решить его и найти корни — они и есть собственные значения , , …

Шаг №3. Для каждого найденного найти собственный вектор:

Это однородная система, решение которой даёт соответствующее .

Пример

Например, у нас есть матрица:

Найдём для неё собственные значения и векторы.

Шаг №1. Сначала составим характеристическое уравнение.

Шаг №2. Решим уравнение. Оно имеет два корня:

Шаг 3. Для каждого собственного значения найдём собственный вектор. Начнём с :

Берём любой ненулевой вектор, являющийся решением уравнения. Теперь для второго собственного числа :

Результат. Матрица имеет следующие собственные векторы и значения:

Реализация в Python

В Python найти собственные значения и векторы можно с помощью библиотек numpy и scipy:

1A = np.array([[-1, -6], [2, 6]])
2
3import numpy as np
4
5vals, vecs = np.linalg.eig(A)
6print("Собственные значения:", vals)
7print("Собственные векторы:\\n", vecs)
8
9from scipy.linalg import eig
10
11vals, vecs = eig(A)
12print("Собственные значения:", vals)
13print("Собственные векторы:\\n", vecs)

Матрица — это линейный оператор, определённым образом растягивающий, сжимающий и поворачивающий пространство вместе с его объектами. Однако, как следует из равенства, собственные векторы при деформации пространства претерпевают увеличение или уменьшение длины иногда с изменением направления на противоположное, но не испытывают поворота в пространстве.

💡Геометрически собственные векторы — это направления, в которых действие матрицы проявляется как масштабирование.

И это масштабирование определяется как раз собственным значением.

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

Собственные векторы $v_1$ и $v_2$

Собственные векторы и , векторы ортонормированного базиса и при действии матрицы .Также на графиках показан единичный круг для визуализации действия матрицы

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

Стоит уточнить, что обратное не обязательно верно: не обязательно все собственные значения должны быть различны, чтобы говорить о линейной независимости собственных векторов матрицы .

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

💡Диагонализацией называется процесс нахождения соответствующей диагональной матрицы для диагонализируемой матрицы или линейного отображения:

Где — матрица, в которой столбцы — собственные векторы матрицы ; — диагональная матрица собственных значений.

Квадратная матрица, которую нельзя диагонализировать, называется дефектной.

Почему это верно? Произведение матриц и по определению собственных векторов равно следующему:

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

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

Диагонализация реализована в библиотеках numpy и scipy:
1import numpy as np
2
3vals, vecs = np.linalg.eig(A) # Собственные векторы
4P = vecs
5D = np.diag(vals)
6A_rec = P @ D @ np.linalg.inv(P)
7np.allclose(A, A_rec)  # True, если диагонализируемая
8
9from scipy.linalg import eig, inv
10
11vals, vecs = eig(A) # Собственные векторы
12P = vecs 
13D = np.diag(vals)
14A_rec = P @ D @ inv(P)

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

Но есть важный и очень приятный класс матриц — это симметричные матрицы.

💡Симметричная матрица — это квадратная матрица, которая остается неизменной после транспонирования:

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

Теперь, когда мы вооружились знанием о собственных значениях и векторах матрицы, введём новое понятие — спектральный радиус:

💡Спектральный радиус матрицы — это максимальное по модулю собственное значение этой матрицы:

Спектральный радиус показывает, насколько сильно матрица может растянуть вектор, не меняя его направления. То есть максимальный коэффициент растяжения вдоль собственного направления вектора.

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

Если же диагонализируема, но её собственные векторы не ортогональны, то, хотя векторы и масштабируются в , направления полуосей эллипса не совпадают с . Это хорошо видно на рисунке ниже: чем меньше угол между , тем сильнее различие между их образами и действительными осями эллипса. При этом каждый нормированный собственный вектор всё равно растягивается в своём направлении на величину, равную .

Нормированные собственные векторы $v_1$ и $v_2$

Нормированные собственные векторы и до и после действия матрицы . Так как векторы и нормированы, они лежат на единичной окружности

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

Анализ сходимости градиентного спуска. В задачах оптимизации квадратичных функций (или локально квадратичных приближений) спектральный радиус матрицы Гессиана ограничивает максимально допустимый шаг градиентного спуска для сходимости.

То есть спектральный радиус Гессиана функции потерь влияет на скорость сходимости и выбор шага обучения :

Анализ стабильности рекуррентных нейронных сетей (RNN). Чтобы избежать взрыва или затухания градиентов при обучении, нужно, чтобы спектральный радиус у скрытого состояния (hidden state) был равен или был меньше единицы:

Если происходит затухание градиентов. Если же , то наоборот, взрыв градиентов.

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

До сих пор мы рассматривали разложение, связанное с собственными значениями квадратных матриц (диагонализация). Однако на практике далеко не каждая матрица является квадратной или легко диагонализируемой. А в машинном обучении мы почти всегда работаем с прямоугольными матрицами данных — например, когда есть объектов и признаков и .

В таких случаях особенно важны универсальные матричные разложения, применимые к любым матрицам и сохраняющие важную информацию об их структуре. Рассмотрим их подробнее.

Матричные разложения

Среди матричных разложений особое место занимают:

  1. Полное сингулярное разложение (англ. SVD, Singular Value Decomposition) — мощный инструмент для анализа структуры данных, сжатия информации и снижения размерности.
  2. QR-разложение — фундаментальный алгоритм в численных методах, часто используемый для устойчивого решения систем линейных уравнений и при построении ортонормированных базисов. Мы уже реализовали его ранее.
  3. Разложение Холецкого (Cholesky) — специализированное, но эффективное разложение, применимое к симметричным положительно определённым матрицам, например, в регрессии.

Эти разложения не просто способы представить матрицу в виде произведения других матриц. Они позволяют устойчиво и эффективно решать фундаментальные задачи: от решения уравнений и оценки ранга до приближённого восстановления данных и анализа обусловленности. Мы рассмотрим, как работают сингулярное разложение и разложение Холецкого, а также где они используются. Плюс коснёмся темы низкоранговых приближений.

Полное сингулярное разложение (SVD)

Сингулярное разложение мы рассмотрим подробно, так как оно является фундаментальным и универсальным. Для начала введём определение и будем отталкиваться от него.

Для любой матрицы существует разложение вида:

Где:

  • — ортогональная матрица, столбцы которой — левые сингулярные векторы матрицы ;
  • — прямоугольно-диагональная матрица с неотрицательными сингулярными числами матрицы по диагонали, расположенными в порядке убывания;
  • — ортогональная матрица, столбцы которой — правые сингулярные векторы матрицы .

Теперь попробуем разобраться в том, что это определение нам говорит. Мы воздействуем на пространство сначала матрицей , потом , а потом матрицей . Результат этого воздействия — это то же самое, что воздействие матрицы на исходное пространство.

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

Матрица

По определению мы знаем, что матрица задаёт новый ортонормированный базис из векторов , так как она ортогональна. Это значит, что переведёт любой вектор в этот новый базис, где векторы будут новыми осями координат.

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

Матрица

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

Неквадратные диагональные матрицы бывают высокими (число строк больше числа столбцов) и широкими (число столбцов больше числа строк). Допустим, у нас трёхмерное пространство с некоторым базисом . Сравним, как повлияют на пространство высокая и широкая диагональные матрицы:

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

Диагональные элементы матрицы называются сингулярными числами матрицы . Их обычно обозначают как , где . Сами числа — это корни из собственных значений матрицы .

Это не отрицательные числа, и они всегда упорядочены по убыванию. Геометрически каждое показывает, во сколько раз матрица растягивает пространство вдоль соответствующего направления (заданного правым сингулярным вектором из ).

Таким образом, матрица масштабирует новый базис и меняет размерность пространства, если является неквадратной: если матрица высокая, пространство переходит в пространство более высоких размерностей, если широкая, то наоборот, в пространство низких размерностей. Пространство размерности переходит в пространство размерности .

Матрица

Действует по аналогии с матрицей — это тоже поворот (отражение) вокруг центра координат. Размерность пространства не меняется и остаётся .


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

Коммутативная диаграмма SVD

Коммутативная диаграмма SVD

А так выглядит рассмотренная нами геометрия на примере квадратной матрицы.

Геометрическая интерпретация SVD

Геометрическая интерпретация SVD для .

Поэтапно разберём, что происходит при действии SVD на векторы:

  • У нас изначально имеется окружность в двумерном пространстве. На рисунке показаны правые сингулярные векторы матрицы : и . Они задают направления, в которых матрица действует наиболее сильно и слабо.
  • Мы применяем матрицу . Происходит переход к координатной системе, в которой и — базисные векторы. Это такой базис, в котором действие матрицы сводится к простому масштабированию по направлениям векторов базиса с помощью диагональной матрицы .
  • Применяем матрицу , которая масштабирует векторы базиса и .
  • Матрица реализует ортогональное преобразование (поворот и/или отражение), приводя масштабированный эллипс обратно в исходное пространство. Оси эллипса теперь сонаправлены с левыми сингулярными векторами и .

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

Геометрическая интерпретация SVD для высокой прямоугольной матрицы

Геометрическая интерпретация SVD для высокой прямоугольной матрицы

В случае широких прямоугольных матриц на шаге 2 один или несколько (в зависимости от разницы между количеством строк и столбцов матрицы , на рисунке ниже — один) правых сингулярных векторов уменьшаются до нуля, из-за чего происходит уменьшение размерности пространства.

Геометрическая интерпретация SVD для широкой прямоугольной матрицы

Геометрическая интерпретация SVD для широкой прямоугольной матрицы

Пример

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

Шаг №1. Сингулярные числа. Для начала находим матрицу :

Чтобы найти её собственные значения, выпишем характеристическое уравнение и его корни:

Теперь мы можем рассчитать сингулярные числа:

Шаг №2. Матрица . Находим правые сингулярные векторы — это собственные векторы матрицы . Сначала для собственного числа :

Не забываем нормировать вектор:

Теперь то же самое для второго собственного числа матрицы - :

И вот мы получили матрицу :

Шаг №3. Матрица . Находим сначала левые сингулярные векторы. Формула для поиска векторов:

Для и :

Аналогично для и :

Третий вектор должен быть ортогонален первым двум (не забываем нормировать):

Собираем матрицу :

Результат

Сингулярное разложение играет фундаментальную роль во многих алгоритмах машинного обучения.

Оно лежит в основе анализа главных компонент (PCA), который используется для снижения размерности данных при сохранении наиболее значимой информации. В латентно-семантическом анализе (англ. LSA, Latent semantic analysis) SVD помогает извлекать скрытые смыслы из текстов, выявляя взаимосвязи между словами и документами.

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

Сингулярное разложение в библиотеках numpy, scipy и sklearn
1import numpy as np
2
3A = np.array([[1, 0], [0, 1], [1, 1]])
4U, S, VT = np.linalg.svd(A, full_matrices=True)
5
6from scipy.linalg import svd
7
8A = np.array([[1, 0], [0, 1], [1, 1]])
9U, S, VT = svd(A, full_matrices=True)
10
11from sklearn.decomposition import PCA
12
13A = np.array([[1, 0], [0, 1], [1, 1]])
14pca = PCA(n_components=2)
15pca.fit(A)
16components = pca.components_
17explained_var = pca.explained_variance_

Итак, сингулярное разложение (SVD) позволяет разложить любую матрицу на последовательность простых линейных преобразований: поворот (или отражение), масштабирование вдоль новых координатных осей и обратный поворот. Благодаря этому SVD даёт мощную геометрическую интерпретацию действия матрицы на пространство: каждое сингулярное число определяет, насколько сильно матрица растягивает пространство вдоль соответствующего направления.

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

Возникает естественный и крайне полезный вопрос: можно ли отбросить эти «малозначимые» компоненты, упростив матрицу, но не потеряв главное? Именно к этой идее нас подводит низкоранговое приближение, которое позволяет представить сложную матрицу в более компактном и интерпретируемом виде — за счёт усечения её сингулярного разложения.

Низкоранговые приближения

Чтобы понять, что стоит за этим термином, напомним, что ранг матрицы — это максимальное число линейно независимых строк (или столбцов) или, эквивалентно, число ненулевых сингулярных чисел в её SVD. Геометрически ранг определяет размерность подпространства, в котором находятся все строки или столбцы матрицы. Чем ниже ранг, тем проще геометрия матрицы и тем меньше информации она содержит.

Пусть матрица описывает некоторый набор данных: строки соответствуют объектам (например, людям, товарам, наблюдениям), а столбцы — признакам или измерениям. Если применить к ней полное сингулярное разложение, мы получим представление в виде , где и — ортогональные матрицы, описывающие направления действия, а — диагональная матрица с сингулярными числами, упорядоченными по убыванию.

Именно эти числа определяют «вес» или значимость каждого из направлений преобразования: чем больше значение , тем более важным является соответствующее преобразование вдоль направлений и .

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

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

💡Матрицу можно аппроксимировать матрицей меньшего ранга:

Где , и — это усечённые версии соответствующих матриц полного сингулярного разложения, содержащие только первые столбцов (или диагональных элементов) и отражающие наиболее значимые компоненты исходной матрицы.

При этом новая матрица имеет ранг не выше , но остаётся максимально близкой к по норме Фробениуса, то есть она минимизирует сумму квадратов отклонений между соответствующими элементами оригинальной и приближённой матрицы:

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

Иллюстрация низкорангового приближения матрицы

Иллюстрация низкорангового приближения матрицы через собственные векторы

Слева: действие матрицы на единичный круг растягивает пространство вдоль нормированных собственных векторов и , превращая круг в эллипс.

Справа: приближение матрицы матрицей ранга 1 сохраняет только главное направление , по которому растяжение наиболее сильное. В результате вся окружность схлопывается в отрезок длины вдоль — это геометрическая интерпретация приближённой матрицы ранга 1: .

Пример

Для иллюстрации механизма низкорангового приближения рассмотрим простой числовой пример. Пусть матрица задаёт оценки трёх студентов по двум дисциплинам. Строки матрицы соответствуют студентам, а столбцы — предметам.

Выглядит она следующим образом:

Применяя к ней полное сингулярное разложение , можно увидеть, что первое сингулярное число значительно больше второго:

Это означает, что почти вся изменчивость данных сосредоточена вдоль одного главного направления.

Если мы оставим только первую компоненту в разложении, получим матрицу ранга 1:

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

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

На рисунке ниже представлен пример сжатия изображения с помощью низкорангового приближения. Слева вверху — оригинальное изображение, далее — его приближения с рангами 1, 10 и 100. При низком ранге сохраняется только общая структура, при увеличении ранга восстанавливаются детали. Чем выше ранг, тем точнее приближение, но тем выше и объём данных.

Влияние ранга сингулярного разложения на качество восстановления изображения

Влияние ранга сингулярного разложения на качество восстановления изображения

Таким образом, низкоранговое приближение позволяет:

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

Такой приём лежит в основе многих методов машинного обучения: от PCA и латентно-семантического анализа до рекомендательных систем. Во всех этих задачах сингулярное разложение позволяет извлекать ключевые скрытые закономерности, устраняя шум и избыточность. Именно поэтому SVD и его приближённые формы играют важнейшую роль в линейной алгебре применительно к анализу данных.

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

Одним из таких методов является разложение Холецкого, которое позволяет заменить обращение матриц или громоздкие разложения на более быстрые и устойчивые вычисления, используя треугольную структуру. Давайте рассмотрим, как работает разложение Холецкого и где его применение даёт наибольший выигрыш.

Разложение Холецкого (Cholesky)

Разложение Холецкого применимо только к симметричным положительно определённым матрицам — таким, которые можно считать матричными аналогами положительных чисел.

💡Симметричная матрица называется положительно определённой, если для любого ненулевого вектора выполняется условие . Это эквивалентно тому, что все собственные значения матрицы строго положительны.

Это ограничение на первый взгляд может показаться серьёзным, но на практике такие матрицы встречаются довольно часто. Например, матрицы ковариаций, матрицы Гессиана в задачах оптимизации, а также матрицы , возникающие в нормальных уравнениях регрессии, всегда симметричны и часто положительно определены. Для таких матриц существует уникальное представление вида:

Где — нижнетреугольная матрица с положительными диагональными элементами.

Рассмотрим это разложение на примере. Пусть дана матрица A:

Найдём нижнетреугольную матрицу — такую, что .

Пусть:

Приравниваем к :

Результат:

Этот результат мы можем проверить:

Разложение Холецкого особенно эффективно в задачах, где требуется решение симметричных линейных систем — например, в байесовских методах, гауссовских процессах, регуляризованной линейной регрессии (Ridge-регрессии), или при максимизации логарифма правдоподобия. Вычислительная сложность составляет всего , и благодаря треугольной структуре все вычисления сводятся к подстановке без необходимости инверсии матриц.

Разложение Холецкого в Python
1import numpy as np
2
3A = np.array([[4, 2], [2, 3]])
4L = np.linalg.cholesky(A)
5
6from scipy.linalg import cholesky
7
8A = np.array([[4, 2], [2, 3]])
9L = cholesky(A, lower=True)

Решение линейной регрессии через разложение Холецкого

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

Оно получается из квадратичной функции потерь:

Функция потерь достигает минимума при нулевом градиенте по — раскрываем скобки по формуле квадрата нормы.

Поскольку (оба выражения — скаляры), смешанные члены объединяются:

Таким образом, функция потерь имеет следующий вид:

Минимизируем по . Поскольку не зависит от , оставляем только те слагаемые, в которых есть . Производная от остальных слагаемых будет нулевой.

Приравниваем градиент к нулю — в этой точке квадратичная функция потерь достигает своего минимума:

Делим обе части надвое и получаем нормальные уравнения:

Это и есть классическое аналитическое решение задачи линейной регрессии через минимум среднеквадратичной ошибки.

Матрица всегда симметрична, и если её столбцы линейно независимы, она положительно определена — то есть как раз пригодна для разложения Холецкого. Вместо обращения матрицы, которое может быть неустойчивым, мы можем записать:

Тогда решение нормальных уравнений можно выразить через две треугольные системы:

  1. Сначала решить .
  2. Затем решить .

Этот метод численно более устойчив.

Допустим, у нас есть матрица признаков и вектор целевой переменной :

Тогда:

Построим правую часть :

Вместо того чтобы решать , заменим разложение Холецкого: . Мы хотим найти нижнетреугольную матрицу , такую, что:

Найдём элементы матрицы :

Решаем уравнение через разложение Холецкого:

Обозначим , тогда:

Подставим:

Теперь решаем :

Мы получили коэффициенты регрессионной прямой без оборачивания матриц.

Различные способы разложения матриц — от универсального SVD до специализированного разложения Холецкого — позволяют эффективно решать задачи линейной алгебры. Однако при всей их полезности остаётся важный практический вопрос: насколько надёжны полученные решения в присутствии шума, погрешностей округления или неидеальных данных?

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

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

Число обусловленности

Все три разложения — SVD, QR и разложение Холецкого — по-разному связаны с понятием численной устойчивости.

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

Отношение между максимальным и минимальным сингулярными числами называется числом обусловленности матрицы:

Оно показывает, насколько решение чувствительно к небольшим изменениям в . Большое число обусловленности — это признак нестабильности (плохой обусловленности), особенно опасной при решении систем, в которых матрица близка к вырожденной. Если матрица плохо обусловлена, то даже небольшие погрешности в матрице признаков или целевой переменной могут привести к большим ошибкам в предсказанных весах . Такое может случиться, если:

  • Признаки сильно коррелированы (мультиколлинеарность). Если два признака почти линейно зависимы (например, «доход» и «налог»), то в возникает почти линейная зависимость между столбцами, и матрица становится близкой к вырожденной.
  • Признаки на разных масштабах. Если один столбец содержит значения от до , а другой — от до , то масштаб сингулярных значений различается, и это тоже ухудшает обусловленность.
  • Слишком много признаков ( в ). Если признаков больше, чем объектов, то точно будет сингулярной — потому что ранг не может превышать , а значит, у неё будет меньше независимых направлений, чем размерность.

Если плохо обусловлена или сингулярна, то:

  • Обратная матрица либо не существует, либо её вычисление нестабильно.
  • Весовой вектор становится неустойчивым: малейшие изменения в данных вызывают большие скачки в предсказаниях.
  • Модель может легко переобучиться: она подгоняет шум, а не закономерности.

QR-разложение, так же, как SVD, обладает высокой устойчивостью, особенно потому, что ортогональные матрицы не искажают геометрию: они сохраняют длины и углы. Это позволяет избежать накопления ошибок в промежуточных шагах и делает метод пригодным для больших и разреженных систем. Если при QR-разложении в диагональных элементах матрицы появляются почти нулевые значения, это сигнал о том, что соответствующие признаки линейно зависимы — таким образом, QR помогает также оценить ранг матрицы.

Разложение Холецкого является самым быстрым из трёх, но при этом требует, чтобы матрица была строго положительно определённой. Если в процессе разложения диагональные элементы становятся нулевыми или мнимыми (что не должно происходить в корректно предобработанных данных), это свидетельствует о вырожденности или почти линейной зависимости столбцов исходной матрицы. Такое поведение — явный признак плохой обусловленности и необходимости регуляризации.

Число обусловленности и ранг матрицы в Python
1import numpy as np
2
3A = np.array([[1, 1], [1, 1.0001]])
4cond = np.linalg.cond(A) # Число обусловленности
5rank = np.linalg.matrix_rank(A) # Ранг матрицы

Отлично, с матричными разложениями разобрались!

Давайте коротко вспомним, о чём шла речь в этом параграфе.

  • Мы узнали, что собственные значения и векторы помогают понять внутреннюю структуру матрицы и направление, в котором она растягивает или сжимает пространство.
  • Разобрались, как сингулярное разложение (SVD) позволяет сжать данные, оставив только самые значимые компоненты и минимизировав потерю информации.
  • Поняли, что разложение Холецкого важно для стабильного решения систем уравнений и численной устойчивости вычислений.
  • И, наконец, обсудили, как по рангу и числу обусловленности можно оценить, не потеряем ли мы информацию при обучении модели на данных.

А в следующем параграфе мы обсудим, как упростить анализ данных с помощью снижения размерности.



Чтобы добавить в заметки выделенный текст, нажмите Ctrl + E
Предыдущий параграф4.8. Проекции, углы и ортогональность
Следующий параграф4.10. Снижение размерности и латентные факторы
Спектральные методы и матричные разложения