这个问题可能很愚蠢,但我找不到解释。
我正在从头开始编码多元概率密度函数(出于研究目的),我需要计算的一件事是数据的协方差矩阵。我正在使用 Iris 数据集(150 个样本,4 个特征),当我编码时:
cov_matrix = np.cov(X)
print(cov_matrix.shape) // (150,150)
我不明白为什么它返回一个 150x150 矩阵,这是一个“逐元素协方差矩阵”吗?它不应该是一个 4x4 协方差矩阵吗?
提前致谢。
这个问题可能很愚蠢,但我找不到解释。
我正在从头开始编码多元概率密度函数(出于研究目的),我需要计算的一件事是数据的协方差矩阵。我正在使用 Iris 数据集(150 个样本,4 个特征),当我编码时:
cov_matrix = np.cov(X)
print(cov_matrix.shape) // (150,150)
我不明白为什么它返回一个 150x150 矩阵,这是一个“逐元素协方差矩阵”吗?它不应该是一个 4x4 协方差矩阵吗?
提前致谢。
默认情况下, Numpy 假设变量在行中,而观察值在列中:
rowvar : bool,可选
如果 rowvar 为 True(默认),则每一行代表一个变量,列中包含观察值。否则,关系被转置:每列代表一个变量,而行包含观察值。
在numpy.cov的参考页面中,有一个名为的参数,默认rowvar
设置为True
。以下段落是它的解释:
如果 rowvar 为 True(默认),则每一行代表一个变量,列中包含观察值。否则,关系被转置:每列代表一个变量,而行包含观察值。
因此,它假设给定的矩阵在列中有观察值。因此,您需要输入$X^T$(通过X.T
)或使用 调用此函数rowvar=False
。