Почему EmpiricalCovariance не выводит матрицу с постоянной диагональю? - PullRequest
0 голосов
/ 26 апреля 2019

При использовании EmpiricalCovariance для разработки ковариационной матрицы для многомерных данных я бы ожидал, что диагональ этой матрицы (от верхнего левого до нижнего правого) будет равна единице, поскольку, конечно, переменная всегда буду идеально соотносить себя. Однако, это не так. Почему нет?

Вот пример, построенный с помощью тепловой карты морского рога: Covariance matrix plotted as a heatmap. The diagonal from the top-left to the top-right is lighter than most of the rest of the data, but not the lightest points.

Как видите, диагональ легче большинства данных, однако она не такая легкая, как самая легкая точка.

1 Ответ

0 голосов
/ 27 апреля 2019

Если вы посмотрите на реализацию класса EmpiricalCovariance и утилиту функцию , которую она вызывает, вы увидите, что np.cov(data, bias=1) (почти) совпадает с EmpiricalCovariance.fit(...).covariance_.

Давайте проведем несколько экспериментов:

from sklearn.covariance import EmpiricalCovariance
import numpy as np

np.random.seed(10)
data = np.random.rand(10, 10)
np.allclose(EmpiricalCovariance().fit(data).covariance_, np.cov(data.T, bias=1))
# returns True !

Из официальных документов numpy вы можете видеть, что диагональные элементы ковариационной матрицы - это дисперсии строк:

np.isclose(np.var(data[0]), np.cov(data, bias=1)[0][0])
# returns TRUE
...