不使用numpy计算协方差矩阵

问题描述 投票:1回答:1

我正在尝试计算协方差矩阵,该矩阵在不使用numpy库的情况下手动最大化似然估计,但是我似乎无法获得正确的答案。我正在尝试遵循以下公式:

Maximum Likelihood estimate for covariance

我知道我正在正确计算均值。因此,实际计算协方差的部分一定存在问题,但我不知道在哪里?这是我的代码:

mat = [[1,2,3],[4,6,8],[3,5,7]]

#now calc covariance for each element of the matrix
Cov = []
for j in range(len(means)):
    sum = 0
    covs = []
    for k in range(len(means)):
        for i in range(len(means)):
            sum += ((mat[i][j] - means[j]) * (mat[i][k] - means[k]))
        result  = sum/ len(means)
        covs.append(result)
    Cov.append(covs)
print(np.reshape(S,(3,3)))

这就是我得到的:

[[ 1.55555556  3.66666667  6.33333333]
[ 2.11111111  5.          8.66666667]
[ 2.66666667  6.33333333 11.        ]]

这是我应该得到的:

[[1.55555556 2.11111111 2.66666667]
[2.11111111 2.88888889 3.66666667]
[2.66666667 3.66666667 4.66666667]]
python covariance covariance-matrix
1个回答
2
投票

您应该为协方差矩阵的每个条目重置总和,

    covs = []
    for k in range(len(means)):
        sum = 0
        for i in range(len(means)):
            sum += ((mat[i][j] - means[j]) * (mat[i][k] - means[k]))
        covariance  = sum/ len(means)
        covs.append(covariance)
© www.soinside.com 2019 - 2024. All rights reserved.