协方差矩阵怎么求,核心做法就是先把每一列变量算出平均值,再把每个数据点减去对应平均值,然后用不同变量之间的协同波动量组成方阵。简单说,矩阵里的对角线位置放各个变量自己的方差,非对角线位置放两个变量之间的协方差。掌握这一套流程后,不管是手写计算、表格计算还是程序计算,都能按固定步骤把协方差矩阵整理出来。
一、先搞懂要算什么
协方差矩阵不是一个“新东西”,它就是把多个变量之间的波动关系排成表格。
假设有两个变量:
| 符号 | 含义 |
|---|---|
| x | 第一个变量的一组数据 |
| y | 第二个变量的一组数据 |
| x̄ | x 的平均值 |
| ȳ | y 的平均值 |
| Cov(x, x) | x 自己的方差 |
| Cov(y, y) | y 自己的方差 |
| Cov(x, y) | x 和 y 之间的协方差 |
两个变量的协方差矩阵长这样:
| x | y | |
|---|---|---|
| x | Cov(x, x) | Cov(x, y) |
| y | Cov(y, x) | Cov(y, y) |
因为 Cov(x, y) 和 Cov(y, x) 数值相同,所以矩阵是对称的。
二、协方差矩阵怎么求的基础步骤
可以按下面这套顺序来。
1. 整理数据
把每个变量放进一列,样本放进一行。
| 样本 | x | y |
|---|---|---|
| 1 | 1 | 2 |
| 2 | 2 | 4 |
| 3 | 3 | 5 |
2. 求每个变量的平均值
以 x 为例:
x̄ = (1 + 2 + 3) / 3 = 2
y 同理:
ȳ = (2 + 4 + 5) / 3 = 11 / 3 ≈ 3.67
3. 做中心化处理
也就是每个数据减去自己的平均值。
| 样本 | x - x̄ | y - ȳ |
|---|---|---|
| 1 | 1 - 2 = -1 | 2 - 3.67 = -1.67 |
| 2 | 2 - 2 = 0 | 4 - 3.67 = 0.33 |
| 3 | 3 - 2 = 1 | 5 - 3.67 = 1.33 |
中心化的作用是看每个数据点偏离平均值的程度。
4. 计算两两协方差
两个变量 x 和 y 的协方差可以用:
Cov(x, y) = Σ[(xᵢ - x̄)(yᵢ - ȳ)] / (n - 1)
这里使用 n - 1,是样本协方差常用口径。
对上面数据:
| 样本 | (x - x̄) | (y - ȳ) | 乘积 |
|---|---|---|---|
| 1 | -1 | -1.67 | 1.67 |
| 2 | 0 | 0.33 | 0 |
| 3 | 1 | 1.33 | 1.33 |
求和:
1.67 + 0 + 1.33 = 3
除以 n - 1:
Cov(x, y) = 3 / (3 - 1) = 1.5
5. 计算对角线上的方差
方差就是变量和变量自己的协方差。
Cov(x, x) = Σ[(xᵢ - x̄)²] / (n - 1)
| 样本 | x - x̄ | (x - x̄)² |
|---|---|---|
| 1 | -1 | 1 |
| 2 | 0 | 0 |
| 3 | 1 | 1 |
求和:
1 + 0 + 1 = 2
除以 n - 1:
Cov(x, x) = 2 / 2 = 1
y 同理:
| 样本 | y - ȳ | (y - ȳ)² |
|---|---|---|
| 1 | -1.67 | 2.79 |
| 2 | 0.33 | 0.11 |
| 3 | 1.33 | 1.77 |
求和:
2.79 + 0.11 + 1.77 = 4.67
除以 n - 1:
Cov(y, y) = 4.67 / 2 = 2.33
6. 把结果排进矩阵
| x | y | |
|---|---|---|
| x | 1 | 1.5 |
| y | 1.5 | 2.33 |
这个矩阵就是样本协方差矩阵。
三、多变量时怎么扩展
如果有三个变量 x、y、z,矩阵就是:
| x | y | z | |
|---|---|---|---|
| x | Cov(x, x) | Cov(x, y) | Cov(x, z) |
| y | Cov(y, x) | Cov(y, y) | Cov(y, z) |
| z | Cov(z, x) | Cov(z, y) | Cov(z, z) |
计算思路没有变化,只是每两个变量都要算一次协方差。
| 变量数 | 矩阵尺寸 | 需要算的协方差单元格 |
|---|---|---|
| 2 | 2 × 2 | 4 |
| 3 | 3 × 3 | 9 |
| 4 | 4 × 4 | 16 |
| p | p × p | p² |
实际手写时可以只算上三角,再把下三角复制过去,因为矩阵是对称的。
四、公式口径要分清
常见有两种口径:总体协方差和样本协方差。
| 类型 | 公式分母 | 使用场景 |
|---|---|---|
| 总体协方差 | n | 数据代表全部总体 |
| 样本协方差 | n - 1 | 数据只是抽样样本,更常用 |
在机器学习、统计分析、相关系数计算里,样本协方差更常见。
如果要把协方差变成相关系数,可以这样处理:
| 指标 | 公式 |
|---|---|
| 相关系数 | Corr(x, y) = Cov(x, y) / (S_x × S_y) |
其中 S_x 和 S_y 是标准差,也就是方差开平方。
五、用矩阵语言快速理解
如果数据矩阵 X 的每一列是一个变量,每一行是一个样本。
步骤如下:
- 求每一列均值。
- 每一列减去自己的均值,得到中心矩阵 Z。
- 计算 ZᵀZ / (n - 1)。
- 得到的方阵就是样本协方差矩阵。
可以用表格记住:
| 操作 | 目的 |
|---|---|
| 列均值 | 找到每个变量的中心 |
| 减去均值 | 看波动大小 |
| 转置乘法 | 计算变量之间的协同波动 |
| 除以 n - 1 | 得到样本协方差 |
六、实际计算时常用工具
表格软件做法
在 Excel 或 WPS 里可以这样:
| 步骤 | 做法 |
|---|---|
| 1 | 把变量放成多列 |
| 2 | 使用 AVERAGE 求每列均值 |
| 3 | 使用 SUMPRODUCT 或协方差函数计算两两协方差 |
| 4 | 把结果排成方阵 |
代码做法
如果有一张表格数据:
| 操作 | 说明 |
|---|---|
| 读取数据 | 每列是一个变量 |
| 求均值 | 对列做平均 |
| 去均值 | 得到中心数据 |
| 计算矩阵 | 用中心数据转置乘法 |
| 除以 n - 1 | 输出样本协方差矩阵 |
在代码里常见的思路是:
| 工具 | 常用表达 |
|---|---|
| Python | 用 pandas 计算 cov |
| R | 用 cov 函数 |
| MATLAB | 用 cov 函数 |
| NumPy | 用 np.cov |
核心算法都是一致的:先中心化,再计算协同波动,再整理成方阵。
【常见问题】
问题1:协方差矩阵怎么求时第一步先看什么?
回答1:协方差矩阵怎么求,第一步先看每个变量的平均值。因为协方差矩阵怎么求依赖中心化处理,只有先把 x、y、z 各自的均值算出来,才能继续算协方差矩阵怎么求后面的乘积和矩阵排列。
问题2:样本协方差矩阵怎么求和总体协方差矩阵怎么求有什么差别?
回答2:样本协方差矩阵怎么求常用 n - 1 作为分母,总体协方差矩阵怎么求常用 n 作为分母。协方差矩阵怎么求的公式主体一样,都是均值、中心化、两两协同波动、排成方阵,区别主要在协方差矩阵怎么求时的分母口径。
问题3:只有两个变量时协方差矩阵怎么求更简单?
回答3:只有两个变量时,协方差矩阵怎么求可以只算四个格子:x 的方差、y 的方差、x 和 y 的协方差、y 和 x 的协方差。协方差矩阵怎么求时后两个格子数值相同,所以协方差矩阵怎么求可以只算一次 Cov(x, y),再复制到对称位置。
问题4:数据列方向放错会影响协方差矩阵怎么求吗?
回答4:数据列方向会影响协方差矩阵怎么求的读数。协方差矩阵怎么求时,通常把每个变量放成一列,把每个样本放成一行。这样算出的均值、中心化和矩阵行列含义都清楚,协方差矩阵怎么求也更容易检查。
免责声明:以上内容用于学习理解协方差矩阵怎么求的计算思路,实际使用可结合数据口径、统计目标和项目规范进行调整。


