Python: отсутствует шаг в алгоритме ковариационной матрицы - PullRequest
0 голосов
/ 13 февраля 2020

Я написал метод, который возвращает ковариационную матрицу данной матрицы, я думаю, что в коде, который я написал, отсутствует какая-то нормализация, поскольку полученная мной матрица ровно несколько раз постоянна, чем матрица, которую я получаю из np.cov ( )

import numpy as np
def calculate_covariance(matrix: np.array):
    mean_rows = np.zeros(matrix.shape[1])
    for rows in matrix:
        mean_rows += rows
    mean_rows /= matrix.shape[0]
    mean_matrix = []
    for _ in range(matrix.shape[0]):
        mean_matrix.append(mean_rows)
    mean_matrix = np.array(mean_matrix)
    subtracted_matrix = matrix - mean_matrix
    cov_matrix = np.dot(subtracted_matrix.T, subtracted_matrix)
    return cov_matrix

1 Ответ

1 голос
/ 13 февраля 2020

Действительно, если вы прочитаете документацию , вы обнаружите, что np.cov по умолчанию делится на N-1.

Кроме того, ваш код может быть значительно улучшен, если numpy вычислить строку означает:

def cov(mat):
    # covariance of the *rows* of the given matrix
    rowmeans = mat.mean(axis=1, keepdims=True)
    norm = mat - rowmeans
    return norm.dot(norm.T) / (mat.shape[1] - 1)
...