我们将直接进入统计学的核心——均值向量和协方差矩阵的计算,以及它们在分析数据集时的关键作用。我们将以一个具体的例子,包含身高和体重的数据集,来演示如何从头到尾计算这两个统计量,并解释其意义。

均值向量计算

均值向量(Mean Vector)提供了数据集中每个特征的平均值。对于含有 n n n个观测值的 m m m个特征的数据集,均值向量是一个 m m m维向量,其中每个元素是对应特征的均值。

公式:
μ = [ μ 1 , μ 2 , . . . , μ m ] \mu = [\mu_1, \mu_2, ..., \mu_m] μ=[μ1,μ2,...,μm]
其中, μ j = 1 n ∑ i = 1 n x i j \mu_j = \frac{1}{n}\sum_{i=1}^{n}x_{ij} μj=n1i=1nxij

  • μ j \mu_j μj是第 j j j个特征的均值。
  • x i j x_{ij} xij是第 i i i个观测的第 j j j个特征值。
  • n n n是观测值的数量。

例子:
考虑身高和体重的数据集,包含4个观测值:

  • 身高: [ 160 , 165 , 170 , 175 ] [160, 165, 170, 175] [160,165,170,175]
  • 体重: [ 55 , 60 , 65 , 70 ] [55, 60, 65, 70] [55,60,65,70]

计算均值向量:

  • 平均身高: μ 身高 = 160 + 165 + 170 + 175 4 = 167.5 \mu_{\text{身高}} = \frac{160 + 165 + 170 + 175}{4} = 167.5 μ身高=4160+165+170+175=167.5
  • 平均体重: μ 体重 = 55 + 60 + 65 + 70 4 = 62.5 \mu_{\text{体重}} = \frac{55 + 60 + 65 + 70}{4} = 62.5 μ体重=455+60+65+70=62.5

因此,均值向量为: μ = [ 167.5 , 62.5 ] \mu = [167.5, 62.5] μ=[167.5,62.5]

协方差矩阵计算

协方差矩阵(Covariance Matrix)描述了数据集中特征间的相互变化趋势。它不仅展示了单个特征的变异性(通过方差),还显示了特征之间的协方差。

公式:
对于 m m m个特征,协方差矩阵是一个 m × m m \times m m×m矩阵,其中元素定义为:
Σ j k = 1 n − 1 ∑ i = 1 n ( x i j − μ j ) ( x i k − μ k ) \Sigma_{jk} = \frac{1}{n-1}\sum_{i=1}^{n}(x_{ij} - \mu_j)(x_{ik} - \mu_k) Σjk=n11i=1n(xijμj)(xikμk)

  • Σ j k \Sigma_{jk} Σjk是特征 j j j和特征 k k k之间的协方差。
  • μ j \mu_j μj μ k \mu_k μk分别是特征 j j j k k k的均值。
  • n n n是观测值的数量。

例子:
使用上述身高和体重数据计算协方差矩阵。

首先,我们已知:

  • μ 身高 = 167.5 \mu_{\text{身高}} = 167.5 μ身高=167.5
  • μ 体重 = 62.5 \mu_{\text{体重}} = 62.5 μ体重=62.5

计算方差和协方差:

  • 方差(身高): 使用公式计算得 Σ 11 \Sigma_{11} Σ11
  • 方差(体重): 使用公式计算得 Σ 22 \Sigma_{22} Σ22
  • 协方差(身高, 体重): 使用公式计算得 Σ 12 = Σ 21 \Sigma_{12} = \Sigma_{21} Σ12=Σ21

现在,我们将直接计算这些值。

让我们计算每个特征的方差和身高与体重之间的协方差,以构建协方差矩阵。

在计算完毕后,我们得到以下结果:

  • 均值向量: 对于身高和体重,均值分别为 167.5 167.5 167.5 62.5 62.5 62.5,因此均值向量为 μ = [ 167.5 , 62.5 ] \mu = [167.5, 62.5] μ=[167.5,62.5]

  • 协方差矩阵:
    [ 41.67 41.67 41.67 41.67 ] \begin{bmatrix} 41.67 & 41.67 \\ 41.67 & 41.67 \end{bmatrix} [41.6741.6741.6741.67]
    其中,对角线元素( 41.67 41.67 41.67)代表身高和体重的方差,显示了它们各自的变异程度;非对角线元素(同样是 41.67 41.67 41.67)代表身高和体重之间的协方差,指示了它们之间的正相关性。

import numpy as np

# 数据
heights = np.array([160, 165, 170, 175])
weights = np.array([55, 60, 65, 70])

# 计算均值
mean_height = np.mean(heights)
mean_weight = np.mean(weights)

# 计算方差和协方差
variance_height = np.var(heights, ddof=1)
variance_weight = np.var(weights, ddof=1)
covariance_height_weight = np.cov(heights, weights)[0, 1]

# 构造协方差矩阵
covariance_matrix = np.array([[variance_height, covariance_height_weight],
                              [covariance_height_weight, variance_weight]])

mean_height, mean_weight, covariance_matrix

(167.5,
 62.5,
 array([[41.66666667, 41.66666667],
        [41.66666667, 41.66666667]]))

通过这些计算,我们可以看到身高和体重在该数据集中呈现出强烈的正相关性:随着身高的增加,体重也相应增加。均值向量简明地总结了每个特征的平均水平,而协方差矩阵深入揭示了特征间的相互关系,是理解数据集多维性质的关键。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐