📜  流中均值和方差的表达式(1)

📅  最后修改于: 2023-12-03 14:56:04.222000             🧑  作者: Mango

流中均值和方差的表达式

在统计学中,流是指数据一次只接收一个观测值,并且观测值之间的时间间隔不确定的数据序列。流中的数据可以是无限的,因此常常需要动态的计算它们的属性。本文将介绍流中均值和方差的表达式及其实现方法。

流中均值的表达式

流中均值可以用以下公式来表示:

$$ \bar{x_n}=\frac{1}{n}\sum_{i=1}^{n}{x_i} $$

其中,$n$代表数据流的样本个数,$x_i$代表第$i$个样本的取值。表达式的含义是将所有样本的取值加起来,再除以样本个数,即可计算出流的均值。

流中方差的表达式

流中方差的表达式可以使用以下公式来表示:

$$ s_n^2 = \frac{1}{n-1}\sum_{i=1}^{n}(x_i-\bar{x_n})^2 $$

其中,$s_n^2$ 代表流中样本的方差,$\bar{x_n}$ 代表流的均值,$n$ 代表数据流的样本个数,$x_i$代表第$i$个样本的取值。表达式的含义是,将每个样本的数值与当时的均值作差,求出差值的平方,再将所有的平方和加起来,最后除以样本数减1,即可得出流的方差。

动态计算流中均值和方差

对于流中的数据,我们需要实时计算其均值和方差。这可以通过以下两个算法来实现:

算法1:Welford算法

Welford算法是一种用于实时计算数据流的均值和方差的算法。与传统计算均值和方差的公式不同,Welford算法不需要保留所有样本的值,而是通过动态更新样本均值和方差的方式实现。

算法的核心思想是在计算均值和方差时逐个遍历样本,并在每一个新样本到达时更新当前均值、方差和样本数量。Welford算法只需要两个变量即可实现均值和方差的计算,其中 $\bar{x_n}$ 代表当前的样本均值,$s_n^2$ 代表当前的样本方差。

下面是Althon Norby的python实现代码:

class RunningStats:

    def __init__(self):
        self.n = 0
        self.m = 0.0
        self.s = 0.0

    def add(self, x):
        self.n += 1
        delta = x - self.m
        self.m += delta / self.n
        self.s += delta * (x - self.m)

    def mean(self):
        return self.m

    def variance(self):
        if self.n > 1:
            return self.s / (self.n - 1)
        else:
            return 0.0

    def standard_deviation(self):
        return math.sqrt(self.variance())

算法2:使用numpy计算流的均值和方差

如果使用Python,也可以使用numpy模块中的rolling方法来计算流的均值和方差。rolling方法用于计算一个滑动窗口内的统计属性,该滑动窗口可以是时间窗口或数据窗口,并且滑动窗口的大小可以是固定的或变化的。

例如下面是一个用于计算滑动窗口均值和方差的代码片段:

import numpy as np

data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
mean = np.mean(data)
var = np.var(data)
print("Mean:", mean)
print("Variance:", var)
总结

流中均值和方差是对数据流的描述和分析必不可少的基本统计量。在实时处理大量数据时,使用Welford算法或numpy模块提供的rolling方法,可以实现对流中均值和方差的实时计算,从而更好地应对数据的动态变化。