scipy.stats.random_correlation#
-
scipy.stats.random_correlation =
object> [источник]# Случайная корреляционная матрица.
Возвращает случайную корреляционную матрицу по заданному вектору собственных значений. Возвращаемая матрица симметрична, положительно полуопределена и имеет единичную диагональ.
The eigs ключевое слово задает собственные значения корреляционной матрицы и подразумевает размерность.
- Параметры:
- eigs1d ndarray
Собственные значения корреляционной матрицы. Все собственные значения должны быть неотрицательными и в сумме давать количество собственных значений.
- seed{None, int,
numpy.random.Generator,numpy.random.RandomState, опционально Если seed равно None (или np.random),
numpy.random.RandomStateиспользуется синглтон. Если seed является int, новыйRandomStateиспользуется экземпляр, инициализированный с seed. Если seed уже являетсяGeneratorилиRandomStateэкземпляр, то используется этот экземпляр.- tolfloat, опционально
Допуск для проверки входных параметров
- diag_tolfloat, опционально
Допуск отклонения диагонали результирующей матрицы. По умолчанию: 1e-7
Методы
rvs(eigs=None, random_state=None)
Генерирует случайные корреляционные матрицы, все с собственными значениями eigs.
- Возвращает:
- rvsndarray или скаляр
Случайные N-мерные матрицы размера (размер, dim, dim), каждая с собственными значениями eigs.
- Вызывает:
- RuntimeError
Ошибка с плавающей запятой помешала сгенерировать корректную корреляционную матрицу.
Примечания
Генерирует случайную корреляционную матрицу, следуя численно устойчивому алгоритму, описанному Davies & Higham. Этот алгоритм использует одно O(N) подобное преобразование для построения симметричной положительно полуопределённой матрицы и применяет серию вращений Гивенса, чтобы масштабировать её до единиц на диагонали.
Ссылки
[1]Дэвис, Филип Ай; Хайэм, Николас Дж; "Численно устойчивое генерирование корреляционных матриц и их факторов", BIT 2000, Том. 40, № 4, стр. 640 651
Примеры
>>> import numpy as np >>> from scipy.stats import random_correlation >>> rng = np.random.default_rng() >>> x = random_correlation.rvs((.5, .8, 1.2, 1.5), random_state=rng) >>> x array([[ 1. , -0.02423399, 0.03130519, 0.4946965 ], [-0.02423399, 1. , 0.20334736, 0.04039817], [ 0.03130519, 0.20334736, 1. , 0.02694275], [ 0.4946965 , 0.04039817, 0.02694275, 1. ]]) >>> import scipy.linalg >>> e, v = scipy.linalg.eigh(x) >>> e array([ 0.5, 0.8, 1.2, 1.5])