数学期望在概率论和统计学中是指试验中每次可能结果的概率乘以其结果的总和,描述一个随机事件中的随机变量的平均值的大小可以用数学期望这个概念。它反映随机变量平均取值的大小。
另外大数定律规定,随着重复次数接近无穷大,数值的算术平均值几乎肯定地收敛于期望值。
数学期望可以用于预测一个随机事件的平均预期情况。
如果随机变量只取得有限个值,或者虽然取值无穷但能按一定次序一一列出,其值域为一个或若干个有限或无限区间,这样的随机变量称为离散型随机变量。例如,一次掷20个硬币, k k k个硬币正面朝上, k k k是随机变量。 k k k的取值只能是自然数0,1,2,…,20。
离散型随机变量的一切可能的取值 x i x_{i} xi与对应的概率 p ( x i ) p\left(x_{i}\right) p(xi)乘积之和称为该离散型随机变量的数学期望,记为 E ( x ) E(x) E(x)。它是简单算术平均的一种推广,类似加权平均。离散型随机变量X的取值为 x 1 , x 2 , x 3 , … , x n x_{1}, x_{2}, x_{3}, \ldots, x_{n} x1,x2,x3,…,xn, p ( x 1 ) , p ( x 2 ) , p ( x 3 ) , … , p ( x n ) p\left(x_{1}\right), p\left(x_{2}\right), p\left(x_{3}\right), \ldots, p\left(x_{n}\right) p(x1),p(x2),p(x3),…,p(xn)为 X X X对应取值的概率,可理解为数据 x 1 , x 2 , x 3 , … , x n x_{1}, x_{2}, x_{3}, \ldots, x_{n} x1,x2,x3,…,xn出现的频率 f ( x i ) f\left(x_{i}\right) f(xi),则: E ( x ) = x 1 ∗ p ( x 1 ) + x 2 ∗ p ( x 2 ) + … + x n ∗ p ( x n ) = x 1 ∗ f ( x 1 ) + x 2 ∗ f ( x 2 ) + … + x n ∗ f ( x n ) E(x)=x_{1} * p\left(x_{1}\right)+x_{2} * p\left(x_{2}\right)+\ldots+x_{n} * p\left(x_{n}\right)=x_{1} * f\left(x_{1}\right)+x_{2} * f\left(x_{2}\right)+\ldots+x_{n} * f\left(x_{n}\right) E(x)=x1∗p(x1)+x2∗p(x2)+…+xn∗p(xn)=x1∗f(x1)+x2∗f(x2)+…+xn∗f(xn) 进一步得到: E ( x ) = ∑ k = 1 n x k p ( x k ) E(x)=\sum_{k=1}^{n} x_{k} p\left(x_{k}\right) E(x)=k=1∑nxkp(xk)
如果变量可以在某个区间内取任一实数,即变量的取值可以是连续的,这随机变量就称为连续型随机变量,连续型随机变量与离散型随机变量都是由随机变量取值范围(取值)确定,例如,公共汽车每15分钟一班,某人在站台等车时间 x x x是个随机变量, x x x的取值范围是[0,15),它是一个区间,从理论上说在这个区间内可取任一实数。
设连续性随机变量 X X X的概率密度函数为 f ( x ) f(x) f(x),若积分绝对收敛,其数学期望为: E ( x ) = ∫ − ∞ + ∞ x f ( x ) d x E(x)=\int_{-\infty}^{+\infty} x f(x) \mathrm{d} x E(x)=∫−∞+∞xf(x)dx
均值是针对实验观察到的特征样本而言的。比如我们实验结果得出了 x 1 , x 2 , x 3 , … , x n x_{1}, x_{2}, x_{3}, \ldots, x_{n} x1,x2,x3,…,xn这 n n n个值,那么我们的均值计算是: X ˉ = x 1 + x 2 + x 3 + … + x n n \bar{X}=\frac{x_{1}+x_{2}+x_{3}+\ldots+x_{n}}{n} Xˉ=nx1+x2+x3+…+xn
比如我们进行掷骰子,掷了六次,点数分别为2,2,2,4,4,4,这六次的观察就是我们的样本,于是我们可以说均值为(2+2+2+4+4+4)/6=3。这里就不能说期望是3。
期望是针对于随机变量而言的一个量,可以理解是一种站在“上帝视角”的值。是针对于他的样本空间而言的。
均值是一个统计量(对观察样本的统计),期望是一种概率论概念,是一个数学特征。
还是以上面那个掷骰子案例为例子,对应的期望求法如下: E ( X ) = 1 ⋅ 1 6 + 2 ⋅ 1 6 + 3 ⋅ 1 6 + 4 ⋅ 1 6 + 5 ⋅ 1 6 + 6 ⋅ 1 6 = 1 + 2 + 3 + 4 + 5 + 6 6 = 3.5 \mathrm{E}(X)=1 \cdot \frac{1}{6}+2 \cdot \frac{1}{6}+3 \cdot \frac{1}{6}+4 \cdot \frac{1}{6}+5 \cdot \frac{1}{6}+6 \cdot \frac{1}{6}=\frac{1+2+3+4+5+6}{6}=3.5 E(X)=1⋅61+2⋅61+3⋅61+4⋅61+5⋅61+6⋅61=61+2+3+4+5+6=3.5 均值和期望可以依据大数定理联系起来,可得出结论:
除了期望,方差(variance)是另一个常见的分布描述量。如果说期望表示的是分布的中心位置,那么方差就是分布的离散程度。方差是在概率论和统计方差衡量随机变量或一组数据时离散程度的度量,方差越大,说明随机变量取值越离散。,方差在统计描述和概率分布中有不同的定义和计算公式。
假设有这么两个集合:[0,8,12,20]和[8,9,11,12],这两个集合对应均值都是10,但显然两者的差别很大,通过计算方差即可得出二者的差异:第一个集合表现的比较动荡,第二个集合表现比较平稳。
概率论中方差用来度量随机变量和其数学期望(即均值)之间的偏离程度。
设 X X X是一个离散型随机变量,若 E ( ( X − E ( X ) ) 2 ) E\left((X-E(X))^{2}\right) E((X−E(X))2) 存在,则称它为 X X X 的方差,记为 D ( X ) D(X) D(X), Var ( X ) \operatorname{Var}(X) Var(X) 或 D X DX DX,其中 E ( X ) E(X) E(X)是 X X X的期望值, X X X是变量值。
离散型随机变量方差计算公式: D ( X ) = E ( ( X − E ( X ) ) 2 ) = E ( X 2 ) − ( E ( X ) ) 2 D(X)=E\left((X-E(X))^{2}\right)=E\left(X^{2}\right)-(E(X))^{2} D(X)=E((X−E(X))2)=E(X2)−(E(X))2 若其定义域为(a,b),概率密度函数为 f ( x ) f(x) f(x),连续型随机变量方差计算公式: D ( X ) = ∫ a b ( x − μ ) 2 f ( x ) d x D(X)=\int_{a}^{b}(x-\mu)^{2} f(x) d x D(X)=∫ab(x−μ)2f(x)dx
统计中的方差(样本方差)是每个样本值与全体样本均值之差的平方值的平均数,代表每个变量(观察值)与总体均值间的离散程度。为避免出现离均差总和为零,另外离均差平方和会受样本含量的影响,所以统计学上采用平均离均差平方和来描述变量的变异程度。
总体方差计算公式为: σ 2 = ∑ i = 1 N ( X i − μ ) 2 N \sigma^{2}=\frac{\sum_{i=1}^{N}(X_{i}-\mu)^{2}}{N} σ2=N∑i=1N(Xi−μ)2 其中 σ 2 \sigma^{2} σ2为总体方差, X X X为变量, μ \mu μ为总体均值, N N N为总体例数。
由于在实际环境中没有办法穷举所有例子, 所以只能找出部分样本数据,基于这部分样本进行测算。用下面的 S 2 S^{2} S2来近似 σ 2 \sigma^{2} σ2,另外实际应用中,往往连 X X X 的期望 μ \mu μ 也不清楚,所以往往用样本数据的均值来替代,首先求取样本数据总体均值: X ˉ = x 1 + x 2 + x 3 + … + x n n \bar{X}=\frac{x_{1}+x_{2}+x_{3}+\ldots+x_{n}}{n} Xˉ=nx1+x2+x3+…+xn 然后有: S 2 = ∑ i = 1 n ( X i − X ˉ ) 2 n − 1 S^{2}=\frac{\sum_{i=1}^{n}\left(X_{i}-\bar{X}\right)^{2}}{n-1} S2=n−1∑i=1n(Xi−Xˉ)2 其中 S 2 S^{2} S2为样本的方差, n n n为样本的个数。
此处,将分母由 n n n 变成 n − 1 n-1 n−1 是因为这样能使我们以较小的样本集更好地逼近总体的标准差,保证方差的估计是无偏的,具体的分析过程可以看为什么样本方差(sample variance)的分母是 n-1?
# -*- coding: utf-8 -*-
import math
def get_average(records):
"""
平均值
"""
return sum(records) / len(records)
def get_variance(records):
"""
方差
"""
average = get_average(records)
return sum([(x - average) ** 2 for x in records]) / len(records)
标准差也被称为标准偏差,在中文环境中又常称均方差,是数据偏离均值的平方和平均后的方根,用 σ \sigma σ表示。标准差是方差的算术平方根。标准差能反映一个数据集的离散程度。
求取总体标准差: σ = 方 差 = 1 N ∑ i = 1 N ( X i − μ ) 2 \sigma=\sqrt{方差}=\sqrt{\frac{1}{N} \sum_{i=1}^{N}\left(X_{i}-\mu\right)^{2}} σ=方差=N1i=1∑N(Xi−μ)2 其中, μ \mu μ 代表总体 X X X的均值。
求取样本标准差: S = 1 n − 1 ∑ i = 1 n ( X i − X ˉ ) 2 S=\sqrt{\frac{1}{n-1} \sum_{i=1}^{n}\left(X_{i}-\bar{X}\right)^{2}} S=n−11i=1∑n(Xi−Xˉ)2
由于方差出现了平方项造成量纲的倍数变化,造成与我们要处理的数据的量纲不一致,多了个平方,虽然能很好的描述数据与均值的偏离程度,但是处理结果是不符合我们的直观思维的。 比如身高(cm)的方差,变成了身高的平方,无法直观反映身高(cm)的偏离程度。而标准差的根号就抵消了这个平方,就能相对直观了描述数据与均值之间的偏离程度,在描述一个波动范围时标准差比方差更方便。标准偏差越小,这些值偏离平均值就越少,反之亦然。
# -*- coding: utf-8 -*-
import math
def get_standard_deviation(records):
"""
标准差 == 均方差
"""
variance = get_variance(records)
return math.sqrt(variance)
方差和标准差一般是用来描述一维数据的,但现实生活中我们常常会遇到含有多维数据的数据集,比如说上学时统计的多个学科的考试成绩。面对这样的数据集,我们当然可以按照每一维独立计算其方差,但是通常我们还想了解更多,比如,学生的数学成绩与英语成绩是否存在一些联系。协方差就是这样一种用来度量两个随机变量关系的统计量,在概率论和统计学中用于衡量两个变量的总体误差。而方差是协方差的一种特殊情况,即当两个变量是同一个或者相同时的特殊情况。协方差表示的是两个变量的总体的误差,这与只表示一个变量误差的方差不同。 如果两个变量的变化趋势一致,也就是说如果其中一个大于自身的期望值,另外一个也大于自身的期望值,那么两个变量之间的协方差就是正值。 如果两个变量的变化趋势相反,即其中一个大于自身的期望值,另外一个却小于自身的期望值,那么两个变量之间的协方差就是负值。我们可以仿照方差的定义: var ( X ) = ∑ i = 1 n ( X i − X ˉ ) ( X i − X ˉ ) n − 1 \operatorname{var}(\mathrm{X})=\frac{\sum_{i=1}^{n}\left(X_{i}-\bar{X}\right)\left(X_{i}-\bar{X}\right)}{n-1} var(X)=n−1∑i=1n(Xi−Xˉ)(Xi−Xˉ) 来度量各个维度偏离其均值的程度,协方差可以这样来定义: cov ( X , Y ) = ∑ i = 1 n ( X i − X ˉ ) ( Y i − Y ˉ ) n − 1 \operatorname{cov}(\mathrm{X}, \mathrm{Y})=\frac{\sum_{i=1}^{n}\left(X_{i}-\bar{X}\right)\left(Y_{i}-\bar{Y}\right)}{n-1} cov(X,Y)=n−1∑i=1n(Xi−Xˉ)(Yi−Yˉ) cov ( X , Y ) \operatorname{cov}(\mathrm{X}, \mathrm{Y}) cov(X,Y)为 X X X, Y Y Y的协方差。
从协方差的定义上可以看出一些性质,如:
另外,协方差的结果有什么意义呢?:
协方差作为描述 X X X 和 Y Y Y相关程度的量,在同一物理量纲下有一定作用。但同样的两个量采用不同的量纲使他们的协方差在数值上表现很大的差异,故引入如下概念: ρ ( X , Y ) = cov ( X , Y ) var ( X ) ⋅ var ( Y ) = cov ( X , Y ) σ X σ Y \rho(X, Y)=\frac{\operatorname{cov}(X, Y)}{\sqrt{\operatorname{var}(X)} \cdot \sqrt{\operatorname{var}(Y)}}=\frac{\operatorname{cov}(X, Y)}{\sigma_{X} \sigma_{Y}} ρ(X,Y)=var(X)⋅var(Y)cov(X,Y)=σXσYcov(X,Y) 这个值就可以定量分析两个随机变量的相关程度。
协方差只能处理二维问题,那维数多了自然就需要计算多个协方差,比如 n n n维的数据集就需要计算 C n 2 = n ! 2 ! ∗ ( n − 2 ) ! C_{n}^{2}=\frac{n !}{2 ! *(n-2) !} Cn2=2!∗(n−2)!n! 个协方差,那自然而然我们会想到使用矩阵来组织这些数据。给出协方差矩阵的定义: C n ∗ n = ( c i , j , c i , j = cov ( Dim i , Dim j ) ) C_{n * n}=\left(c_{i, j}, c_{i, j}=\operatorname{cov}\left(\operatorname{Dim}_{i}, \operatorname{Dim}_{j}\right)\right) Cn∗n=(ci,j,ci,j=cov(Dimi,Dimj)) 举一个三维的例子,假设数据集有三个维度,则协方差矩阵为: C = ( cov ( x , x ) cov ( x , y ) cov ( x , z ) cov ( y , x ) cov ( y , y ) cov ( y , z ) cov ( z , x ) cov ( z , y ) cov ( z , z ) ) \mathrm{C}=\left(\begin{array}{ccc}\operatorname{cov}(x, x) & \operatorname{cov}(x, y) & \operatorname{cov}(x, z) \\ \operatorname{cov}(y, x) & \operatorname{cov}(y, y) & \operatorname{cov}(y, z) \\ \operatorname{cov}(z, x) & \operatorname{cov}(z, y) & \operatorname{cov}(z, z)\end{array}\right) C=⎝⎛cov(x,x)cov(y,x)cov(z,x)cov(x,y)cov(y,y)cov(z,y)cov(x,z)cov(y,z)cov(z,z)⎠⎞ 可见,协方差矩阵是一个对称的矩阵,而且对角线是各个维度的方差。
另外协方差矩阵作为一种数学工具,通常被用来计算特征之间的某种联系。在机器学习中,协方差矩阵用于降维的主成分分析法(PCA)。
假设我们有4个样本,每个样本有两个变量,也就是两个特征。如: a 1 = ( 1 , 2 ) , a 2 = ( 3 , 6 ) , a 3 = ( 4 , 2 ) , a 4 = ( 5 , 2 ) a_{1}=(1,2), a_{2}=(3,6), a_{3}=(4,2), a_{4}=(5,2) a1=(1,2),a2=(3,6),a3=(4,2),a4=(5,2) ,则可以用一个矩阵来表示: A = [ 1 2 3 6 4 2 5 2 ] A=\left[\begin{array}{ll}1 & 2 \\ 3 & 6 \\ 4 & 2 \\ 5 & 2\end{array}\right] A=⎣⎢⎢⎡13452622⎦⎥⎥⎤,那么就可以用两个变量空间X、Y来表示这两个特征: X = [ 1 3 4 5 ] , Y = [ 2 6 2 2 ] X=\left[\begin{array}{l}1 \\ 3 \\ 4 \\ 5\end{array}\right], Y=\left[\begin{array}{l}2 \\ 6 \\ 2 \\ 2\end{array}\right] X=⎣⎢⎢⎡1345⎦⎥⎥⎤,Y=⎣⎢⎢⎡2622⎦⎥⎥⎤,那么如何利用协方差矩阵来比较 X X X 和 Y Y Y之间的相关性呢?
由前面的协方差可以知道,协方差是表示所有变量之间的两两相关的关系。所以,包含两个特征的矩阵,其协方差矩阵应该是2x2的。 cov ( A ) = [ cov ( X , X ) cov ( X , Y ) cov ( Y , X ) cov ( Y , Y ) ] \operatorname{cov}(A)=\left[\begin{array}{cc}\operatorname{cov}(X, X) & \operatorname{cov}(X, Y) \\ \operatorname{cov}(Y, X) & \operatorname{cov}(Y, Y)\end{array}\right] cov(A)=[cov(X,X)cov(Y,X)cov(X,Y)cov(Y,Y)]
第一步:计算出 X X X、 Y Y Y两个特征空间的平均值: x ˉ = 3.25 , y ˉ = 3 \bar{x}=3.25, \bar{y}=3 xˉ=3.25,yˉ=3
第二步:逐一的计算: Cov ( X , X ) = ( 1 − 3.25 ) 2 + ( 3 − 3.25 ) 2 + ( 4 − 3.25 ) 2 + ( 5 − 3.25 ) 2 4 − 1 = 2.9167 Cov ( X , Y ) = ( 1 − 3.25 ) ( 2 − 3 ) + ( 3 − 3.25 ) ( 6 − 3 ) + ( 4 − 3.25 ) ( 2 − 3 ) + ( 5 − 3.25 ) ( 2 − 3 ) 4 − 1 = − 0.3333 Cov ( Y , X ) = ( 2 − 3 ) ( 1 − 3.25 ) + ( 6 − 3 ) ( 3 − 3.25 ) + ( 2 − 3 ) ( 4 − 3.25 ) + ( 2 − 3 ) ( 5 − 3.25 ) 4 − 1 = − 0.3333 Cov ( Y , X ) = ( 2 − 3 ) 2 + ( 0 − 3 ) 2 + ( 2 − 3 ) 2 + ( 2 − 3 ) 2 4 − 1 = 4 \begin{array}{l}\operatorname{Cov}(X, X)=\frac{(1-3.25)^{2}+(3-3.25)^{2}+(4-3.25)^{2}+(5-3.25)^{2}}{4-1}=2.9167 \\ \operatorname{Cov}(X, Y)=\frac{(1-3.25)(2-3)+(3-3.25)(6-3)+(4-3.25)(2-3)+(5-3.25)(2-3)}{4-1}=-0.3333 \\ \operatorname{Cov}(Y, X)=\frac{(2-3)(1-3.25)+(6-3)(3-3.25)+(2-3)(4-3.25)+(2-3)(5-3.25)}{4-1}=-0.3333 \\ \operatorname{Cov}(Y, X)=\frac{(2-3)^{2}+(0-3)^{2}+(2-3)^{2}+(2-3)^{2}}{4-1}=4\end{array} Cov(X,X)=4−1(1−3.25)2+(3−3.25)2+(4−3.25)2+(5−3.25)2=2.9167Cov(X,Y)=4−1(1−3.25)(2−3)+(3−3.25)(6−3)+(4−3.25)(2−3)+(5−3.25)(2−3)=−0.3333Cov(Y,X)=4−1(2−3)(1−3.25)+(6−3)(3−3.25)+(2−3)(4−3.25)+(2−3)(5−3.25)=−0.3333Cov(Y,X)=4−1(2−3)2+(0−3)2+(2−3)2+(2−3)2=4 最后得出协方差矩阵为: Cov ( A ) = [ 2.9167 − 0.3333 − 0.3333 4.000 ] \operatorname{Cov}(A)=\left[\begin{array}{cc}2.9167 & -0.3333 \\ -0.3333 & 4.000\end{array}\right] Cov(A)=[2.9167−0.3333−0.33334.000]
在实际数理统计中,观测值和估计值(拟合值)之间的差。反应的是数据的离散程度以及收敛性,越大则数据离散程度越大、越不收敛。
举个例子:在回归分析过程中,给出了样本的观测值 ( x i , y i ) (x_{i}, y_{i}) (xi,yi),构建出模型(回归方程),将样本观测值 x i x_{i} xi代入拟合得到的方程中,计算出估计值(又叫预测值,拟合值)为 y ^ i \hat{y}_{i} y^i,估计值 y ^ i \hat{y}_{i} y^i与观测值 y i y_{i} yi之间的偏差叫做残差(residual), e e e表示残差的话,则有 e i = y i − y ^ i e_{i}=y_{i}-\hat{y}_{i} ei=yi−y^i。
总结残差:是因变量的观测值 y i y_{i} yi与根据估计的回归方程求出的预测 y ^ i \hat{y}_{i} y^i之差。
均方误差是各数据偏离真实值的距离平方和的平均数,也即误差平方和的平均数。一般被用在机器学习的预测值与真实值之间的距离。均方误差对应的是最小二乘法。
M S E = 1 N ∑ t = 1 N ( observed t − predicted t ) 2 M S E=\frac{1}{N} \sum_{t=1}^{N}\left(\text { observed }_{t}-\text { predicted }_{t}\right)^{2} MSE=N1t=1∑N( observed t− predicted t)2
# -*- coding: utf-8 -*-
import math
def get_mse(records_real, records_predict):
"""
均方误差
"""
if len(records_real) == len(records_predict):
return sum([(x - y) ** 2 for x, y in zip(records_real, records_predict)]) / len(records_real)
else:
return None
均方根误差亦称标准误差,是均方误差的算术平方根。换句话说,是观测值与真实值的平方与观测次数 n n n比值的平方根,在实际测量中,观测次数 n n n总是有限的,真实值只能用最可信赖(最佳)值来代替。标准误差对一组测量中的特大或特小误差反应非常敏感,所以,标准误差能够很好地反映出测量的精密度。这正是标准误差在工程测量中广泛被采用的原因。 R M S E = 1 N ∑ t = 1 N ( observed t − predicted t ) 2 R M S E=\sqrt{\frac{1}{N} \sum_{t=1}^{N}\left(\text { observed }_{t}-\text { predicted }_{t}\right)^{2}} RMSE=N1t=1∑N( observed t− predicted t)2
均方根误差形式上和标准差很上接近,均方误差是数据序列与真实值之间的关系,而标准差是离均差平方和平均后的方根,是数据序列与均值的关系,所以只要搞清楚到底是和真实值还是自身均值之间的关系就可以区分,具体有:
# -*- coding: utf-8 -*-
import math
def get_rmse(records_real, records_predict):
"""
均方根误差
"""
mse = get_mse(records_real, records_predict)
if mse:
return math.sqrt(mse)
else:
return None
均方根值也称作为方均根值或有效值,在数据统计分析中,将所有值平方求和,求其均值,再开平方,就得到均方根值。在物理学中,我们常用均方根值来分析噪声。 X r m s = ∑ i = 1 N X i 2 N = X 1 2 + X 2 2 + ⋯ + X N 2 N X_{r m s}=\sqrt{\frac{\sum_{i=1}^{N} X_{i}^{2}}{N}}=\sqrt{\frac{X_{1}^{2}+X_{2}^{2}+\cdots+X_{N}^{2}}{N}} Xrms=N∑i=1NXi2=NX12+X22+⋯+XN2
# -*- coding: utf-8 -*-
import math
def get_rms(records):
"""
均方根值
"""
return math.sqrt(sum([x ** 2 for x in records]) / len(records))