【问题标题】:Computing covariance matrix without using numpy不使用 numpy 计算协方差矩阵
【发布时间】:2020-04-02 13:37:26
【问题描述】:

我正在尝试在不使用 numpy 库的情况下手动计算最大化似然估计的协方差矩阵,但我似乎无法得到正确的答案。我试图通过这个公式:

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

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】:

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

        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)
    

    你可以把它缩短一点

        covs = []
        for k in range(len(means)):
            terms = ( (mat[i][j] - means[j]) * (mat[i][k] - means[k]) for i in range(len(means)) )
            covariance  = sum(terms) / len(means)
            covs.append(covariance)
    

    请务必清除工作区,以便 sum 再次成为内置函数而不是数字。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-13
      • 2018-08-25
      • 2011-11-25
      • 1970-01-01
      • 2015-03-31
      • 1970-01-01
      • 2017-08-27
      相关资源
      最近更新 更多