求索集-第五-到底有多差? 标准差, 方差, 协方差, 协方差矩阵学习笔记一
从页数看, Python数据分析已经学习到1/4, 进度却越来越慢, 原因很简单, 这本书主要面向已经有统计学或数据分析基础, 希望利用Python进行计算机高性能数据分析的用户, 而我基本就是个小白, 大学时学过的统计学, 线性代数, 数据分析也就还记得个转置和正态分布 (为什么没有萝莉分布???), 因此在学习时我必须话额外时间去了解这些基础概念. 但无可否认, 我已经深深喜欢上了这本教材, 比起之前接触过的<<XXX从入门到入土>>, 已经通俗易懂很多, 而且逻辑上也非常合理.
这段时间接触到了统计方面的几个基本概念, 标准差, 方差, 协方差. 坦白讲看见”差”我就虎躯一震, 尘封的那些不愉快的记忆, 不负责任的判断, 刻板的印象似乎慢慢浮现, 好在我本身脸皮够厚, 面对负面的情绪, 心境也慢慢从”你丫再说一遍试试”, “去你大爷的, 滚蛋”, 到”你随便吧”, 再到如今已经能去珍惜自己喜欢的声音, 不喜欢的则能产生漠视的本能, 无论如何, 还是坦然了许多.
跑题了.
不得不说, Python, 或者说基于Python的NumPy 数学库, 真的是太牛了, 很多复杂的计算仅仅用一条语句就能解决. 因此, 如果能以常用的NumPy函数为线索, 把涉及的统计概念能稍微深入了解一些, 同时对于简单的数据, 能进行纸笔计算, 那么这样学起来会更扎实和通透. 毕竟我现在不是为了升学或考证书而学习.
先说我对方差的理解. 对于一个问题, 我们在解决时会得到一系列观测值, 转换成数据就是一个一维数组, 那么方差就是这个数组中每个元素相对于均值的偏差程度的量化. 计算方法是:
μ是数组元素平均值, N是数组样本数 (也就是数组长度)
而标准差, 则是方差的平方根, 注意标准差分为标准差和样本标准差, 区别就是计算时前者的分母是N, 后者是N-1, 前者用于对全部样本进行计算, 而后者则是对巨量样本中选择的部分样本做计算.
方差是针对一组样本进行偏移分析, 而协方差则体现两组以上数据样本之间的一致性, 如, “男人财富的数量”和”其配偶的胸围”这两组变量是否存在相关性; 如果相关, 是正相关 (钱多胸大) 还是负相关 (只能说有钱男人品味真奇怪), 这个就要请出协方差来解决, 计算方法是:
cov (x, y) = E(x - Ex)(y-Ey)
而对于多组变量, 为了表示任意两组变量的协方差, 则需要协方差矩阵, 这也是最让我头大的地方. 这里必须仔细说说.
对于多组变量, 比如3组吧, 就像这样:
1 | X:1 3 7 8 11 |
那么很显然, 组合组之间存在3的平方, 共9种关系: XX, XY, XZ, YX, YY, YZ, ZX, ZY, ZZ.
那么, 把每种关系的协方差都求出来, 就知道了这9种关系的全部相关性, 如果把这9种相关性数值写成矩阵, 那么就是这样:
1 | Cxx Cxy Cxz |
这就相当于一个协方差元素表, 只要看每个值就能知道对应的两组变量之间的关系了. 而且我们还会有以下发现:
- 协方差矩阵从左上到右下的对角线就是每个变量的方差. 但注意这里的方差是样本方差, 分母是N-1, 因为NumPy计算协方差时分母就是N-1
- 由于cov(x, y) = cov (y, x), 所以这个表以从左上到右下的对角线为对称轴, 对角线两边的值是对称的
- N组数据的协方差矩阵是NxN, 所以一维或二维数组的协方差公式是”正方形”的二维数组
NumPy求解这些差本身的函数非常简单,
1 | arr4 = np.array([-1, 2, 5]) #定义一维数组 |
这部分内容肯定是层层深入的, 现在的初级理解肯定会迭代和更新. 今天最大的收获大概是, 这是我近年来为数不多能在周日花大段时间学习了. 看书, 查资料, 纸笔计算, 青春的感觉, 回来了呢~~~