2022-05-15

求索集-第五-到底有多差...

求索集-第五-到底有多差? 标准差, 方差, 协方差, 协方差矩阵学习笔记一

从页数看, Python数据分析已经学习到1/4, 进度却越来越慢, 原因很简单, 这本书主要面向已经有统计学或数据分析基础, 希望利用Python进行计算机高性能数据分析的用户, 而我基本就是个小白, 大学时学过的统计学, 线性代数, 数据分析也就还记得个转置和正态分布 (为什么没有萝莉分布???), 因此在学习时我必须话额外时间去了解这些基础概念. 但无可否认, 我已经深深喜欢上了这本教材, 比起之前接触过的<<XXX从入门到入土>>, 已经通俗易懂很多, 而且逻辑上也非常合理.

Python数据分析

这段时间接触到了统计方面的几个基本概念, 标准差, 方差, 协方差. 坦白讲看见”差”我就虎躯一震, 尘封的那些不愉快的记忆, 不负责任的判断, 刻板的印象似乎慢慢浮现, 好在我本身脸皮够厚, 面对负面的情绪, 心境也慢慢从”你丫再说一遍试试”, “去你大爷的, 滚蛋”, 到”你随便吧”, 再到如今已经能去珍惜自己喜欢的声音, 不喜欢的则能产生漠视的本能, 无论如何, 还是坦然了许多.

跑题了.

不得不说, Python, 或者说基于Python的NumPy 数学库, 真的是太牛了, 很多复杂的计算仅仅用一条语句就能解决. 因此, 如果能以常用的NumPy函数为线索, 把涉及的统计概念能稍微深入了解一些, 同时对于简单的数据, 能进行纸笔计算, 那么这样学起来会更扎实和通透. 毕竟我现在不是为了升学或考证书而学习.

先说我对方差的理解. 对于一个问题, 我们在解决时会得到一系列观测值, 转换成数据就是一个一维数组, 那么方差就是这个数组中每个元素相对于均值的偏差程度的量化. 计算方法是:

方差公式

μ是数组元素平均值, N是数组样本数 (也就是数组长度)

而标准差, 则是方差的平方根, 注意标准差分为标准差和样本标准差, 区别就是计算时前者的分母是N, 后者是N-1, 前者用于对全部样本进行计算, 而后者则是对巨量样本中选择的部分样本做计算.

方差是针对一组样本进行偏移分析, 而协方差则体现两组以上数据样本之间的一致性, 如, “男人财富的数量”和”其配偶的胸围”这两组变量是否存在相关性; 如果相关, 是正相关 (钱多胸大) 还是负相关 (只能说有钱男人品味真奇怪), 这个就要请出协方差来解决, 计算方法是:

cov (x, y) = E(x - Ex)(y-Ey)

而对于多组变量, 为了表示任意两组变量的协方差, 则需要协方差矩阵, 这也是最让我头大的地方. 这里必须仔细说说.

对于多组变量, 比如3组吧, 就像这样:

1
2
3
X:1 3 7 8 11
Y:2 2 4 1 16
Z:3 2 24 26 31

那么很显然, 组合组之间存在3的平方, 共9种关系: XX, XY, XZ, YX, YY, YZ, ZX, ZY, ZZ.

那么, 把每种关系的协方差都求出来, 就知道了这9种关系的全部相关性, 如果把这9种相关性数值写成矩阵, 那么就是这样:

1
2
3
4
Cxx Cxy Cxz
Cyx Cyy Cyz
Czx Czy Czz
C表示协方差Covariance

这就相当于一个协方差元素表, 只要看每个值就能知道对应的两组变量之间的关系了. 而且我们还会有以下发现:

  • 协方差矩阵从左上到右下的对角线就是每个变量的方差. 但注意这里的方差是样本方差, 分母是N-1, 因为NumPy计算协方差时分母就是N-1
  • 由于cov(x, y) = cov (y, x), 所以这个表以从左上到右下的对角线为对称轴, 对角线两边的值是对称的
  • N组数据的协方差矩阵是NxN, 所以一维或二维数组的协方差公式是”正方形”的二维数组

NumPy求解这些差本身的函数非常简单,

1
2
3
4
arr4 = np.array([-1, 2, 5]) #定义一维数组
arr4.var() #求方差
arr4.var(ddof = 1) #求样本方差
np.cov(arr4) #求协方差公式注意这里不是arr4.cov(),而且由于arr4是一维数组, 所以协方差矩阵是只有1个元素的二维矩阵(1x1)

这部分内容肯定是层层深入的, 现在的初级理解肯定会迭代和更新. 今天最大的收获大概是, 这是我近年来为数不多能在周日花大段时间学习了. 看书, 查资料, 纸笔计算, 青春的感觉, 回来了呢~~~