TGViewer
Quant Researcher Quant Researcher @quant_researcher_ch · 3.14K subscribers
Post #63 1.86K
🎲 Что за случайные матрицы?

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

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

Gaussian Orthogonal Ensemble (GOE)
Симметричная матрица, элементы которой получены из нормального распределения.

Закон Марченко-Пастура
Описывает распределение собственных значений больших прямоугольных случайных матриц.

Собственные числа и вектора
Понятия из базовой теории линейной алгебры.

📍Пример генерации случайной матрицы

import numpy as np
import matplotlib.pyplot as plt

# Generate a random matrix from the Gaussian Orthogonal Ensemble (GOE)
N = 1000 # Size of the matrix
random_matrix = np.random.randn(N, N)
symmetric_matrix = (random_matrix + random_matrix.T) / 2 # Make it symmetric

# Compute eigenvalues
eigenvalues = np.linalg.eigvalsh(symmetric_matrix)

# Plot the histogram of eigenvalues
plt.hist(eigenvalues, bins=50, density=True, alpha=0.75, color="blue")
plt.title("Eigenvalue Distribution of a Random Matrix (GOE)")
plt.xlabel("Eigenvalue")
plt.ylabel("Density")
plt.show()


📍Пример расчета собственных чисел

import numpy as np
import matplotlib.pyplot as plt

# Параметры
N = 1000 # Размер квадратной матрицы
sigma = 1.0 # Стандартное отклонение распределения элементов матрицы

# Генерация случайной квадратной матрицы
X = np.random.normal(0, sigma, (N, N))

# Построение симметричной матрицы A
A = (1/N) * np.dot(X, X.T)

# Вычисление собственных значений
eigenvalues = np.linalg.eigvalsh(A)

# Теоретическая плотность распределения Марченко-Пастура
def mp_density(lambda_, c, sigma):
lambda_min = sigma**2 * (1 - np.sqrt(c))**2
lambda_max = sigma**2 * (1 + np.sqrt(c))**2
if lambda_ < lambda_min or lambda_ > lambda_max:
return 0
return (1 / (2 * np.pi * c * sigma**2 * lambda_)) * np.sqrt((lambda_max - lambda_) * (lambda_ - lambda_min))

# Поскольку матрица квадратная, c = 1
c = 1
lambda_min = sigma**2 * (1 - np.sqrt(c))**2
lambda_max = sigma**2 * (1 + np.sqrt(c))**2
lambda_range = np.linspace(lambda_min, lambda_max, 1000)
mp_density_values = [mp_density(l, c, sigma) for l in lambda_range]

# Визуализация
plt.hist(eigenvalues, bins=100, density=True, alpha=0.75, label='Эмпирическое распределение')
plt.plot(lambda_range, mp_density_values, 'r-', lw=2, label='Теоретическое распределение Марченко-Пастура')
plt.xlabel('Собственные значения')
plt.ylabel('Плотность вероятности')
plt.title('Распределение собственных значений (Закон Марченко-Пастура)')
plt.legend()
plt.grid(True)
plt.show()

👉 Интересный факт! Cлучайные матрицы используются при инициализации весов в нейронных сетях для стабилизации градиентов во время обучения.

Это теоретический минимум, который нужно знать. Глубже можно копать уже для расширения кругозора.

Quant Researcher
  • 🔥 12
  • 👍 7
  • ❤ 3
  • 💯 1
  • 🫡 1
More from @quant_researcher_ch
  1. Oct 8, 2026Как астрофизики находят сигнал, которого почти нет Понравилась аналогия. Если сигнал насто…
  2. Oct 5, 2026Продолжаем готовить классные образовательные материалы, новую площадку и коммьюнити, у нас…
  3. Apr 28, 2026💙 Материалы из НИУ ВШЭ Делимся лекциями, готовимся к запуску магистратуры и наших курсов.…
  4. Apr 9, 2026Видео про инвестиции и построение капитала! (YouTube) Записал для вас видео о том, как стр…
  5. Apr 9, 2026Highly recommended! Quant Researcher
  6. Mar 19, 2026😌 Когда мы с коллегами сделаем трек магистратуры по квантам, мы никому не скажем, но буду…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →