Канал про количественные инвестиции. Делимся полезными материалами, книгами и ресерчами.
Канал на YouTube: https://www.youtube.com/@quantitative_researcher
Курсы для квантов: https://quant.courses
По вопросам и предложениям: @quant_courses_support
Post #63
1.86K
🎲 Что за случайные матрицы?
В лекциях Ильинского и Де Прадо часто упоминаются случайные матрицы и их собственные числа. Есть большая теория, но что нам важно знать как квантам?
Мы писали про применение теории случайных матриц для очистки матрицы корреляций. Чтобы разобраться в механизме этого метода, достаточно знать следующие понятия:
Gaussian Orthogonal Ensemble (GOE)
Симметричная матрица, элементы которой получены из нормального распределения.
Закон Марченко-Пастура
Описывает распределение собственных значений больших прямоугольных случайных матриц.
Собственные числа и вектора
Понятия из базовой теории линейной алгебры.
📍Пример генерации случайной матрицы
📍Пример расчета собственных чисел
👉 Интересный факт! Cлучайные матрицы используются при инициализации весов в нейронных сетях для стабилизации градиентов во время обучения.
Это теоретический минимум, который нужно знать. Глубже можно копать уже для расширения кругозора.
Quant Researcher
В лекциях Ильинского и Де Прадо часто упоминаются случайные матрицы и их собственные числа. Есть большая теория, но что нам важно знать как квантам?
Мы писали про применение теории случайных матриц для очистки матрицы корреляций. Чтобы разобраться в механизме этого метода, достаточно знать следующие понятия:
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

