均值和方差递推公式


前言

计算实时序列数据的均值和方差时,常使递推的方式,可以减少存储和降低计算复杂度( O(n)-> O(1) )。下面将给出递推公式和推导方法。


一、定义

均值

定义:给定一个包含n个样本的集合 X={X1, …Xn},均值就是这个集合中所有元素和的平均值。

公式:
μ = 1 n ∑ i = 1 n x i \begin{aligned} &\mu = \frac{1}{n}\sum_{i =1}^{n}x_{i} \end{aligned} μ=n1i=1nxi

方差

定义:方差是各个数据与其算术平均数的离差平方和的平均数。

公式:
σ 2 = 1 n ∑ i = 1 n ( x i − μ ) 2 \begin{aligned} &\sigma^{2} = \frac{1}{n}\sum_{i =1}^{n}(x_{i} - \mu )^{2} \end{aligned} σ2=n1i=1n(xiμ)2

备注:样本方差的分母是n-1。

二、递推公式

1.均值

令 前n个样本的均值为: μ n = 1 n ∑ i = 1 n x i (2.1) \begin{aligned} &\mu_{n} = \frac{1}{n}\sum_{i =1}^{n}x_{i} \end{aligned} \tag{2.1} μn=n1i=1nxi(2.1)

则,与前n-1个样本的均值的递推公式为:
μ n = 1 n ∑ i = 1 n x i     = 1 n ( ∑ i = 1 n − 1 x i + x n )     = 1 n [ ( n − 1 ) μ n − 1 + x n ]     = μ n − 1 + 1 n ( x n − μ n − 1 ) (2.2) \begin{aligned} &\mu_{n} = \frac{1}{n}\sum_{i =1}^{n}x_{i} \\ &~~~ = \frac{1}{n}\left ( \sum_{i =1}^{n-1}x_{i} + x_{n} \right ) \\ &~~~ = \frac{1}{n}\left [ (n-1)\mu_{n-1} + x_{n} \right ] \\ &~~~ = \mu_{n-1} + \frac{1}{n}(x_{n} - \mu_{n-1} ) \end{aligned} \tag{2.2} μn=n1i=1nxi   =n1(i=1n1xi+xn)   =n1[(n1)μn1+xn]   =μn1+n1(xnμn1)(2.2)

2.方差

令 前n个样本的方差为: σ n 2 = 1 n ∑ i = 1 n ( x i − μ n ) 2 (2.3) \begin{aligned} &\sigma^{2}_{n} = \frac{1}{n}\sum_{i =1}^{n}(x_{i} - \mu_{n} )^{2} \end{aligned} \tag{2.3} σn2=n1i=1n(xiμn)2(2.3)

将(2.2)代入(2.3),可得与前n-1个样本的方差的递推公式为:

σ n 2 = 1 n ∑ i = 1 n [ ( x i − μ n − 1 ) − 1 n ( x n − μ n − 1 ) ] 2     = 1 n ∑ i = 1 n [ ( x i − μ n − 1 ) 2 + 1 n 2 ( x n − μ n − 1 ) 2 − 2 n ( x i − μ n − 1 ) ( x n − μ n − 1 ) ] 2     = 1 n ∑ i = 1 n ( x i − μ n − 1 ) 2 + 1 n 2 ( x n − μ n − 1 ) 2 − 2 n 2 ( x n − μ n − 1 ) ∑ i = 1 n ( x i − μ n − 1 )     = n − 1 n σ n − 1 2 + n + 1 n 2 ( x n − μ n − 1 ) 2 − 2 n 2 ( x n − μ n − 1 ) ( x n − μ n − 1 )     = n − 1 n σ n − 1 2 + n − 1 n 2 ( x n − μ n − 1 ) 2 (2.4) \begin{aligned} &\sigma^{2}_{n} = \frac{1}{n}\sum_{i =1}^{n}\left [(x_{i} - \mu_{n-1})-\frac{1}{n}(x_{n} - \mu_{n-1} ) \right ]^{2} \\ &~~~ = \frac{1}{n}\sum_{i =1}^{n}\left [(x_{i} - \mu_{n-1})^{2}+\frac{1}{n^{2} }(x_{n}- \mu_{n-1} )^{2} - \frac{2}{n}(x_{i} - \mu_{n-1})(x_{n} - \mu_{n-1} ) \right ]^{2} \\ &~~~ = \frac{1}{n}\sum_{i =1}^{n}(x_{i} - \mu_{n-1})^{2} + \frac{1}{n^{2} }(x_{n}- \mu_{n-1} )^{2} - \frac{2}{n^{2}}(x_{n} - \mu_{n-1} )\sum_{i =1}^{n}(x_{i} - \mu_{n-1})\\ &~~~ = \frac{n-1}{n}\sigma^{2}_{n-1} + \frac{n+1}{n^{2}}(x_{n}- \mu_{n-1} )^{2} - \frac{2}{n^{2}}(x_{n} - \mu_{n-1} )(x_{n} - \mu_{n-1} )\\ &~~~ = \frac{n-1}{n}\sigma^{2}_{n-1} + \frac{n-1}{n^{2}}(x_{n}- \mu_{n-1} )^{2} \end{aligned} \tag{2.4} σn2=n1i=1n[(xiμn1)n1(xnμn1)]2   =n1i=1n[(xiμn1)2+n21(xnμn1)2n2(xiμn1)(xnμn1)]2   =n1i=1n(xiμn1)2+n21(xnμn1)2n22(xnμn1)i=1n(xiμn1)   =nn1σn12+n2n+1(xnμn1)2n22(xnμn1)(xnμn1)   =nn1σn12+n2n1(xnμn1)2(2.4)
式(2.4 ) 的推导第三行第3项到第四行第3项,具体推导可见式 ( 2.5 )
∑ i = 1 n ( x i − μ n − 1 ) = ∑ i = 1 n x i − n μ n − 1                      = x n + ∑ i = 1 n − 1 x i − n μ n − 1                      = x n − μ n − 1 + ∑ i = 1 n − 1 x i − ( n − 1 ) μ n − 1                      = x n − μ n − 1 \begin{aligned} &\sum_{i =1}^{n}(x_{i} - \mu_{n-1}) = \sum_{i =1}^{n}x_{i} - n\mu_{n-1} \\ &~~~~~~~~~~~~~~~~~~~~ = x_{n} + \sum_{i =1}^{n-1} x_{i} - n\mu_{n-1}\\ &~~~~~~~~~~~~~~~~~~~~ = x_{n} - \mu_{n-1} + \sum_{i =1}^{n-1} x_{i} - (n-1)\mu_{n-1} \\ &~~~~~~~~~~~~~~~~~~~~ = x_{n} - \mu_{n-1} \end{aligned} i=1n(xiμn1)=i=1nxinμn1                    =xn+i=1n1xinμn1                    =xnμn1+i=1n1xi(n1)μn1                    =xnμn1


总结

相关定义还有标准差、协方差。
参见此链接:https://blog.csdn.net/jisuanji111111/article/details/129183563

  • 23
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 假设有一组数据 $x_1, x_2, ..., x_n$,其均值方差分别为 $\mu_n$ 和 $\sigma^2_n$,现在要求加入一个新数据 $x_{n+1}$,则可以使用以下递推公式计算新的均值方差: $$\mu_{n+1}=\frac{n\mu_n+x_{n+1}}{n+1}$$ $$\sigma^2_{n+1}=\frac{n\sigma^2_n+(x_{n+1}-\mu_n)(x_{n+1}-\mu_{n+1})}{n+1}$$ 其中,$\mu_{n+1}$ 表示加入新数据后的均值,$\sigma^2_{n+1}$ 表示加入新数据后的方差,$n$ 为已有数据的数量。 ### 回答2: MATLAB可以通过递推公式计算均值方差。具体实现如下: 1. 均值递推公式: 要计算一组数据的均值,可以使用以下递推公式: μ_n = μ_{n-1} + (x_n - μ_{n-1}) / n 其中,μ_n表示前n个数据的均值,x_n表示第n个数据,n表示数据的总个数。初始时,μ_0为0。通过不断更新μ_n的值,最终得到整组数据的均值。 2. 方差递推公式: 要计算一组数据的方差,可以使用以下递推公式: σ^2_n = ((n-1) * σ^2_{n-1} + (x_n - μ_{n-1})^2) / n 其中,σ^2_n表示前n个数据的方差,x_n表示第n个数据,μ_{n-1}表示前n-1个数据的均值,σ^2_{n-1}表示前n-1个数据的方差,n表示数据的总个数。初始时,σ^2_0为0。通过不断更新σ^2_n的值,最终得到整组数据的方差。 在MATLAB中,可以使用循环结构来依次读入数据并更新均值方差的值。首先设置初始的均值方差为0,然后根据上述递推公式,在每次循环中更新均值方差的值。最后计算得到整组数据的均值方差。这样就实现了均值方差递推公式的计算。 以上是MATLAB实现均值方差递推公式的方法,通过这种方式可以方便地计算一组数据的均值方差。 ### 回答3: MATLAB可以通过使用递推公式来计算均值(Mean)和方差(Variance),以下是两个基本的递推公式的实现方法。 首先,计算均值递推公式如下: 1. 声明一个变量sum来保存所有数据点的累加和,并初始化为0。 2. 声明一个变量count来保存已处理的数据点数目,并初始化为0。 3. 使用循环结构遍历所有数据点,将数据点的值加到sum中,并将count加1。 4. 最终,均值的计算公式为mean = sum / count。 下面是用MATLAB代码实现的例子: sum = 0; % 初始化累加和为0 count = 0; % 初始化数据点数目为0 for i = 1:length(data) sum = sum + data(i); % 将数据点的值加到累加和中 count = count + 1; % 增加数据点数目 end mean = sum / count; % 计算均值 接下来,计算方差递推公式如下: 1. 声明一个变量sum_sq来保存所有数据点的平方和,并初始化为0。 2. 使用循环结构遍历所有数据点,将数据点的平方加到sum_sq中。 3. 最终,方差的计算公式为variance = (sum_sq - sum^2 / count) / (count - 1)。 下面是用MATLAB代码实现的例子: sum_sq = 0; % 初始化平方和为0 for i = 1:length(data) sum_sq = sum_sq + data(i)^2; % 将数据点的平方加到平方和中 end variance = (sum_sq - sum^2 / count) / (count - 1); % 计算方差 通过这些递推公式,MATLAB可以很方便地计算均值方差。在计算过程中,需要使用循环结构来遍历所有数据点,并逐步更新累加和和平方和。最终,根据公式计算出均值方差的数值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值