方差_标准差
第一趴:大白话理解(保你听一遍就记住)
1. 均值(平均数)—— “大家长啥样”
- 大白话:就是“全班平均分”。把所有人的数加起来,除以人数。
- 作用:告诉你这群人大概在什么水平(比如平均身高170cm)。
2. 方差(Variance)—— “大家吵不吵架”
- 大白话:看每个人跟平均分差距的平方,再平均一下。
- 为啥要平方? 因为有人比平均分高(正数),有人比平均分低(负数),直接加会正负抵消(比如 +10 和 -10 加起来是0,好像大家都很乖,其实两极分化严重)。平方一下,全都变成正数,就暴露真实差距了!
- 作用:数值越大,说明这群人脾气越暴躁,彼此差距越大。
3. 标准差(Standard Deviation)—— 把“平方”变回原样
- 大白话:方差算出来是“平方厘米”、“平方块钱”,听着很别扭。给它开个平方根,单位就变回原来的(厘米、块钱)了。
- 作用:告诉你平均每个人离平均值到底有多远。
- 比如平均身高170cm,标准差是10cm,意思就是“大部分人集中在160~180cm之间”。
4. 协方差(Covariance)—— “两个人是不是一条心”
- 大白话:看两个东西是不是同涨同跌。
- 正数:比如身高和体重,身高涨了,体重大概率也涨(同进退)。
- 负数:比如车速和到达时间,车速越快,时间越短(你涨我跌)。
- 接近0:比如身高和数学成绩,没啥关系(各玩各的)。
5. 相关系数(Correlation Coefficient)—— 把“协方差”标准化
- 大白话:协方差有个缺点,它受单位影响(比如厘米和米的协方差差100倍)。为了公平比较,把协方差缩放到 -1 到 1 之间。
- 1:完全正相关(一个人涨,另一个跟着涨,铁哥们)。
- -1:完全负相关(一个人涨,另一个必跌,死对头)。
- 0:没关系(路人甲和路人乙)。
第二趴:具体数学定义 + 代码怎么算
1. 均值(Mean)
- 公式:( \mu = \frac{x_1 + x_2 + … + x_n}{n} )
- Python(NumPy):
1
2
3import numpy as np
data = [100, 200, 300, 400, 500]
print(np.mean(data)) # 结果:300.0
2. 方差(Variance)
- 重要区分(好多新手在这踩坑):
- 总体方差(
ddof=0,默认):除以n(数据总数)。适用于你已经有全部数据。 - 样本方差(
ddof=1):除以n-1。适用于你只抽样了一部分,想用样本推断总体。因为除以n-1会让结果稍微大一点,更保险(统计学上的无偏估计)。
- 总体方差(
- 公式(总体方差):( \sigma^2 = \frac{1}{n} \sum_{i=1}^{n} (x_i - \mu)^2 )
- Python(NumPy / Pandas):
1
2
3
4
5
6
7
8
9
10
11import numpy as np
import pandas as pd
data = [100, 200, 300, 400, 500]
# 默认是总体方差(除以 n)
print(np.var(data)) # 结果:20000.0
print(pd.Series(data).var()) # 注意!Pandas默认是样本方差(除以 n-1),结果是 25000.0
# 如果想在 NumPy 里算样本方差(除以 n-1),加 ddof=1
print(np.var(data, ddof=1)) # 结果:25000.0
3. 标准差(Standard Deviation)
- 大白话:就是把上面方差的平方根给开了。单位回到原始数据。
- 公式:( \sigma = \sqrt{\text{方差}} )
- Python(NumPy / Pandas):
1
2
3
4
5
6
7
8
9
10
11import numpy as np
data = [100, 200, 300, 400, 500]
# NumPy 总体标准差(除以 n)
print(np.std(data)) # 结果:141.42
# Pandas 默认样本标准差(除以 n-1)
print(pd.Series(data).std()) # 结果:158.11
# NumPy 样本标准差(除以 n-1)
print(np.std(data, ddof=1)) # 结果:158.11灵魂记忆点:标准差比方差好用多了!因为如果数据是“工资”,方差单位是“平方块钱”听不懂,标准差就是实实在在的“块钱”。
4. 协方差(Covariance)
- 公式(样本协方差):( \text{Cov}(X,Y) = \frac{1}{n-1} \sum_{i=1}^{n} (x_i - \bar{x})(y_i - \bar{y}) )
- Python(NumPy):
1
2
3
4
5
6
7
8
9
10
11
12import numpy as np
height = [170, 180, 160, 175] # 身高
weight = [65, 80, 55, 70] # 体重
# 注意:np.cov 默认返回一个协方差矩阵(因为可以算多个变量)
# 矩阵的 [0][1] 位置就是身高的协方差
cov_matrix = np.cov(height, weight)
print(cov_matrix)
# 结果:
# [[25.0, 37.5],
# [37.5, 62.5]]
# 这里的 37.5 就是身高和体重的协方差(正数,说明一起长)
5. 相关系数(Correlation Coefficient,也叫皮尔逊系数)
- 公式:( r = \frac{\text{Cov}(X,Y)}{\sigma_X \cdot \sigma_Y} )(用两者的标准差把协方差归一化)
- 范围:-1 到 1。
- Python(NumPy):
1
2
3
4
5
6
7
8
9
10
11import numpy as np
height = [170, 180, 160, 175]
weight = [65, 80, 55, 70]
# np.corrcoef 返回相关系数矩阵
corr_matrix = np.corrcoef(height, weight)
print(corr_matrix)
# 结果:
# [[1. , 0.9486],
# [0.9486, 1. ]]
# 0.9486 非常接近 1,说明身高和体重强正相关(很铁的兄弟关系!)
第三趴:用“发工资”的例子把所有概念串一遍
假设你们公司 5 个人的工资是:[5000, 6000, 7000, 8000, 9000]
- 均值(平均数) = 7000 块。这就是公司的“平均水平”。
- 方差 = 算出来是 2,000,000(单位是“平方块”,很抽象,没人这么说话)。
- 标准差 = 开平方根 ≈ 1414 块。这把人们说清楚了:“咱们公司大部分人,工资都在 7000 ± 1414 块之间,也就是 5586 ~ 8414 块。”
- 现在再加一个数据:工龄 =
[1, 2, 3, 4, 5]年。- 协方差算出来是正数(比如 5000),说明“工龄越长,工资越高”,但 5000 这个数字受“块”这个单位影响。
- 相关系数算出来可能是 0.99,说明工龄和工资几乎是一根绳上的蚂蚱,强相关!
最后给你一个生活化口诀(记在心里)
- 均值:大家站的平均位置。
- 方差:大家站得散不散(平方后的散度)。
- 标准差:大家平均离均值到底多远(真实的距离)。
- 协方差:两个人是不是一个涨另一个也涨。
- 相关系数:两个人关系的铁不铁(-1到1打分)。
在 Pandas 里偷懒的大招:
df.describe()直接给你看均值、标准差、四分位数。df.cov()直接出协方差矩阵。df.corr()直接出相关系数矩阵,一眼看出哪些列是“铁哥们”!
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 LGQ的博客!