精华内容
下载资源
问答
  • 上一节我们介绍了像素滤波器,下面介绍另一个实时平滑深度图机制–加权移动平均机制。3.2 加权移动平均机制我们通过观察可以发现,即使kinect采集是一个静止场景,在得到深度图上,同一个像素位置对应深度...

    上一节我们介绍了像素滤波器,下面介绍另一个实时平滑深度图的机制–加权移动平均机制。

    3.2 加权移动平均机制

    我们通过观察可以发现,即使kinect采集的是一个静止的场景,在得到的深度图上,同一个像素位置对应的深度值也是在不断变化的,这被称为闪动效应(flickering effect),它是由于随机噪声引起的。
    如果要求稳定的深度值,就要尽量避免这种闪动效应。我们的办法是这样的:
    - 首先,用一个队列存储当前深度帧的前N个深度帧。因为队列是一个FIFO(先进先出)的集合对象,非常适合处理一系列时间离散的数据集。
    - 然后,我们根据时间给这N个帧权值,时间最近的深度值权值最大,表示最重要,距离时间最远的帧权值最小,表示最不重要。
    - 最后,新的深度帧就由队列中的这些深度帧加权平均得到。注意,这个方法对于静止的场景效果很好,但是当有人物在场景中运动时,因为新的深度帧要依据之前的深度帧,所以我们可能会看到一些动作的残影,这时你需要调整一下权值参数和N的大小。

    3.2.1 代码

    // 前帧数量N
    int N = 5;
    // 各个像素深度值总和
    UINT16 sumDepthData[424 * 512] = { 0 };
    // 初始化,将前N帧入队列
    if (queDepthArrays.size() < N)
    {
        UINT16 *temp = new UINT16[424 * 512];
        memcpy(temp, depthData, 424 * 512 * 2);
        queDepthArrays.push_back(temp);
    }
    else
    {
        if (queDepthArrays.size() == N)
        {
            // 队列中加入当前帧
            UINT16 *temp = new UINT16[424 * 512];
            memcpy(temp, depthData, 424 * 512 * 2);
            queDepthArrays.push_back(temp);
        }
        else
        {
            // 队列中加入当前帧,queDepthArrays.back()相当于当前帧,因此只需要更新它
            memcpy(queDepthArrays.back(), depthData, 424 * 512 * 2);
        }
    
        // 队列中已存满N个前帧+一个当前帧
        // Denominator表示分母,count表示权值的分子
        int Denominator = 0;
        int Count = 1;
    
        // 我们首先创建一个空的深度图,每个像素位置上储存前N帧加当前帧深度值加权之和
        // 最后每个像素除以权值之和
        for each (auto item in queDepthArrays)
        {
            // 处理每行像素
            for (int depthArrayRowIndex = 0; depthArrayRowIndex < 424; depthArrayRowIndex++)
            {
                // 处理每个像素
                for (int depthArrayColumnIndex = 0; depthArrayColumnIndex < 512; depthArrayColumnIndex++)
                {
                    int index = depthArrayColumnIndex + (depthArrayRowIndex * 512);
                    sumDepthData[index] += item[index] * Count;
                }
            }
            Denominator += Count;
            Count++;
        }
    
        // 除以权值之和
        for (int i = 0; i<512 * 424;i++) 
        {
            queDepthArrays.back()[i] = depthData[i];
            averagedDepthData[i] = (short)(sumDepthData[i] / Denominator);
        }
        // 相当于queue.pop()
        auto temp = queDepthArrays.begin();
        for (auto iter = queDepthArrays.begin(); iter !=queDepthArrays.end()-1; iter++)
        {
            *iter = *(iter + 1);
        }
        queDepthArrays.back() = *temp;
    }

    3.2.2 显示效果

    为了方便对比,我将N调的比较大,可以看到我手臂挥动的残影。
    如果在实时采集深度图的情况下,可以看到背景上像素的闪动效应明显减小了。

    完整的实时深度图平滑(像素滤波+加权移动平均)代码链接

    请自行配制环境–kinect 2.0SDKOpenCV

    展开全文
  • 移动平均移动平均法是一组最近实际数据来预测未来一期或几期内目标值常用方法。移动平均法适用于即期预测,当时间序列不会快速变化,且不存在季节性因素时候,移动平均法能有效地消除预测中随机波动,对...

    移动平均

    移动平均法是用一组最近的实际数据来预测未来一期或几期内目标值的常用方法。移动平均法适用于即期预测,当时间序列不会快速变化,且不存在季节性因素的时候,移动平均法能有效地消除预测中的随机波动,对序列具有修匀或平滑作用。

    简单移动平均

    是下一期的预测值,代表移动窗口大小,代表的是前n期实际值

    公式浅显易懂

    缺点也显而易见,历史所有时间点对现在的影响权重都一样

    加权移动平均

    代表第t期的权重

    权重的选择是个分析活,需要根据数据的特点进行选择,考虑数据的时间粒度,是否具有周期性等等。一般来说,近期数据对未来更有预测意义,但是如果近期数据存在异常数据,则预测的时候会出现问题,但是期数变多的话,虽然会使得序列更平滑,但是也使得预测值对数据的实际波动不敏感。

    如果序列具有季节性,移动平均的项数N与季节波动长度一致才可以消除季节波动,当序列具有周期性的时候同样道理。

    移正平均

    移动平均项数k为奇数,其移动平均值为移动平均项数中间一期的数值。如果是偶数,则再需要对相邻两个平均值的移动平均,就能使得平均值对正某一时期了。(对于简单移动平均来说)

    很简单的,序列13579,移动平均值就是5

    移动平均线

    移动平均最常见的使用就是在股市中了,将一定时期内的证券价格(指数)「加以平均」,并把不同时间的平均值连接起来,形成一根MA,用以观察证券价格变动趋势的一种技术指标

    aa82d2da3538fce928eb7fd0dd7fbb7e.png
    image-20200925174725577

    很有趣的是,可以从股市规律来学习移动平均的数学规律。

    「滞后性」

    因为移动平均是根据历史数据来计算的,存在一定滞后性,所以有可能错过一些股价变动的信号

    「趋势性」

    移动平均线最大的特点是能够消除一些季节或周期波动,直观地显示趋势,所以可以从大趋势去进行鞠策

    指数加权移动平均

    指数加权移动平均(ewma)是以指数级递减加权的移动平均,各数值的权重随时间呈指数式递减,时间越靠近当前时刻的数据加权影响力越大。

    ewma与MA的区别是,MA通常是以某个大小的时间窗口去计算,而ewma是计算所有样本的,但是会强调当前样本的重要性,逐渐淡化历史样本的重要程度。

    「公式:」

    python代码

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt

    #生成均匀分布数据
    data = pd.DataFrame()
    data['sample'] = np.random.normal(size=100)

    #简单移动平均
    data['MA5'] = data['sample'].rolling(window=5).mean()
    data['MA10'] = data['sample'].rolling(window=10).mean()
    #指数加权移动平均
    data['EWMA5'] = data['sample'].ewm(span=5).mean()
    data['EWMA10'] = data['sample'].ewm(span=10).mean()

    data[['sample','MA5','MA10','EWMA5','EWMA10']].plot(subplots=False, figsize=(12,6), grid=True)

    8d1629b510545475aa86f120f4f70915.png
    image-20200925181921625

    指数平滑

    一次指数平滑

    当时间序列无明显的趋势变化,可用一次指数平滑预测。

    代表t期平滑值

    代表平滑常数

    代表t-1期实际值

    二次指数平滑

    一次指数平滑直接利用平滑值作为预测值,二次指数平滑法则利用平滑值对趋势进行修正得到一个线性平滑模型,适用于具有线性趋势的时间序列

    是线性平滑模型参数

    是第t期二次指数平滑值

    是第t+m期的预测值

    m为预测超前期数

    三次指数平滑

    三次指数平滑是在二次的基础上再平滑

    最后这里的则是三次指数平滑法的t+m期预测值

    「趋势调整」

    一段时间内收集到的数据如果呈现出上升或下降趋势将导致指数预测滞后于实际需求,通过趋势调整,添加趋势修正项,可以在一定程度上改进指数预测效果。

    进行趋势调整的指数平滑预测有三个步骤:

    1、 利用前面介绍的方法计算第t期的简单指数平滑预测

    2、 计算趋势。其公式为:

    其中,

    =第t期经过平滑的趋势;

    =第t期上期经过平滑的趋势;

    b=选择的趋势平滑系数;

    =对第t期简单指数平滑预测;

    =对第t期上期简单指数平滑预测。

    3、计算趋势调整后的指数平滑预测值.计算公式为:

    的确定」

    α值是根据时间序列的变化特性来选取的。若时间序列的波动不大,比较平稳,则α应取小一些,如0.1 ~ 0.3 ;若时间序列具有迅速且明显的变动倾向, 则α应取大一些,如0.6 ~ 0.9。实质上,α是一个经验数据,通过多个值进行试算比较而定,哪个α值引起的预测误差小,就采用哪个。

    ps:发现网络上都是把三次指数平滑法和holt-winters当同一个东西,但是有的三次指数平滑公式又不一样0-0,稍微查了一下资料,上面的三次指数平滑法是布朗指数平滑。下面的又是另一种。

    Holt-Winters

    Holt-Winters季节性方法包括预测方程和三个平滑方程-一个水平(level)的,一个趋势方程,一个用于季节性成分 ,具有相应的平滑参数 。我们用表示季节性的频率,即一年中的季节数。例如,对于季度数据L=4,对于每年的中的月则是

    「加法模型」

    「乘法模型」

    其中数据平滑因子,0 <<1,β是趋势平滑因子,0 季节变化平滑因子,0 <<1-a(这里是数据平滑因子alpha)。

    以加法模型来解释一下几条平滑公式,乘法在意义上是一样的。

    首先是,代表的是经过季节修正的观测值()和无季节项预测值()之间的加权平均

    趋势方程是基于的估计趋势与上一期估计趋势的加权平均

    季节方程是当前季节和上一个季节同期值的加权平均值,我个人对季节项的前半部分理解是独立出季节分量

    预测方程部分下标意思是确保用于预测的季节性指数的估算值来自样本的最后一组观测数据。

    初始趋势估计的一般公式为:

    i = 1,2,...,L设置季节性指数的初始估计会涉及更多。如果N是数据中存在的完整循环数(the number of complete cycles),则:

    其中

    一个是平均值个数据的周期。

    「衰减模型」

    增加阻尼系数作用与趋势,随着预测时间长度的增加而减弱趋势。这通常会提高预测的准确性。

    python代码

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    import seaborn as sns
    #导入库
    from statsmodels.tsa.holtwinters import ExponentialSmoothing

    #生成sin数据
    data = pd.DataFrame()
    a = np.linspace(-1010100)
    b = np.sin(a)
    data['sin']=b

    train,test = data.iloc[:80,0],data.iloc[79:,0]


    model = ExponentialSmoothing(train,seasonal='add',seasonal_periods=31).fit()
    pred = model.predict(start=test.index[0],end=test.index[-1])

    fig=plt.figure(figsize=(12,6))
    plt.plot(train.index,train,label='train')
    plt.plot(test.index,test,label='test')
    plt.plot(pred.index,pred,label='Holt-Winters')
    plt.legend(loc='best')
    plt.show()
    3421bb69f5db8ec7a412dc530070fc4e.png
    image-20200925184544024

    「seasonal_periods」参数的作用就是季节波动,这里设置的是31,几乎完美拟合曲线

    指数平滑法的组合分类

    指数平滑法可以通过组合季节或趋势变换成不同的方法

    7a73fe01f1a8ce57b16bb1813d45426f.png
    img

    Reference

    1. https://wiki.mbalib.com/wiki/%E6%8C%87%E6%95%B0%E5%B9%B3%E6%BB%91%E6%B3%95#.EF.BC.88.E4.B8.89.EF.BC.89_.E4.B8.89.E6.AC.A1.E6.8C.87.E6.95.B0.E5.B9.B3.E6.BB.91.E9.A2.84.E6.B5.8B
    2. https://en.wikipedia.org/wiki/Exponential_smoothing#Triple_exponential_smoothing_(Holt_Winters)
    3. https://otexts.com/fpp2/taxonomy.html
    展开全文
  • 移动平均移动平均法是一组最近实际数据来预测未来一期或几期内目标值常用方法。移动平均法适用于即期预测,当时间序列不会快速变化,且不存在季节性因素时候,移动平均法能有效地消除预测中随机波动,对...

    移动平均

    移动平均法是用一组最近的实际数据来预测未来一期或几期内目标值的常用方法。移动平均法适用于即期预测,当时间序列不会快速变化,且不存在季节性因素的时候,移动平均法能有效地消除预测中的随机波动,对序列具有修匀或平滑作用。

    简单移动平均

    是下一期的预测值,代表移动窗口大小,代表的是前n期实际值

    公式浅显易懂

    缺点也显而易见,历史所有时间点对现在的影响权重都一样

    加权移动平均

    代表第t期的权重

    权重的选择是个分析活,需要根据数据的特点进行选择,考虑数据的时间粒度,是否具有周期性等等。一般来说,近期数据对未来更有预测意义,但是如果近期数据存在异常数据,则预测的时候会出现问题,但是期数变多的话,虽然会使得序列更平滑,但是也使得预测值对数据的实际波动不敏感。

    如果序列具有季节性,移动平均的项数N与季节波动长度一致才可以消除季节波动,当序列具有周期性的时候同样道理。

    移正平均

    移动平均项数k为奇数,其移动平均值为移动平均项数中间一期的数值。如果是偶数,则再需要对相邻两个平均值的移动平均,就能使得平均值对正某一时期了。(对于简单移动平均来说)

    很简单的,序列13579,移动平均值就是5

    移动平均线

    移动平均最常见的使用就是在股市中了,将一定时期内的证券价格(指数)「加以平均」,并把不同时间的平均值连接起来,形成一根MA,用以观察证券价格变动趋势的一种技术指标

    64b3a941ab4fcf056955787a53c443d5.png
    image-20200925174725577

    很有趣的是,可以从股市规律来学习移动平均的数学规律。

    「滞后性」

    因为移动平均是根据历史数据来计算的,存在一定滞后性,所以有可能错过一些股价变动的信号

    「趋势性」

    移动平均线最大的特点是能够消除一些季节或周期波动,直观地显示趋势,所以可以从大趋势去进行鞠策

    指数加权移动平均

    指数加权移动平均(ewma)是以指数级递减加权的移动平均,各数值的权重随时间呈指数式递减,时间越靠近当前时刻的数据加权影响力越大。

    ewma与MA的区别是,MA通常是以某个大小的时间窗口去计算,而ewma是计算所有样本的,但是会强调当前样本的重要性,逐渐淡化历史样本的重要程度。

    「公式:」

    python代码

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt

    #生成均匀分布数据
    data = pd.DataFrame()
    data['sample'] = np.random.normal(size=100)

    #简单移动平均
    data['MA5'] = data['sample'].rolling(window=5).mean()
    data['MA10'] = data['sample'].rolling(window=10).mean()
    #指数加权移动平均
    data['EWMA5'] = data['sample'].ewm(span=5).mean()
    data['EWMA10'] = data['sample'].ewm(span=10).mean()

    data[['sample','MA5','MA10','EWMA5','EWMA10']].plot(subplots=False, figsize=(12,6), grid=True)

    103afeb6d215393e839ebe9d2a2b4c24.png
    image-20200925181921625

    指数平滑

    一次指数平滑

    当时间序列无明显的趋势变化,可用一次指数平滑预测。

    代表t期平滑值

    代表平滑常数

    代表t-1期实际值

    二次指数平滑

    一次指数平滑直接利用平滑值作为预测值,二次指数平滑法则利用平滑值对趋势进行修正得到一个线性平滑模型,适用于具有线性趋势的时间序列

    是线性平滑模型参数

    是第t期二次指数平滑值

    是第t+m期的预测值

    m为预测超前期数

    三次指数平滑

    三次指数平滑是在二次的基础上再平滑

    最后这里的则是三次指数平滑法的t+m期预测值

    「趋势调整」

    一段时间内收集到的数据如果呈现出上升或下降趋势将导致指数预测滞后于实际需求,通过趋势调整,添加趋势修正项,可以在一定程度上改进指数预测效果。

    进行趋势调整的指数平滑预测有三个步骤:

    1、 利用前面介绍的方法计算第t期的简单指数平滑预测

    2、 计算趋势。其公式为:

    其中,

    =第t期经过平滑的趋势;

    =第t期上期经过平滑的趋势;

    b=选择的趋势平滑系数;

    =对第t期简单指数平滑预测;

    =对第t期上期简单指数平滑预测。

    3、计算趋势调整后的指数平滑预测值.计算公式为:

    的确定」

    α值是根据时间序列的变化特性来选取的。若时间序列的波动不大,比较平稳,则α应取小一些,如0.1 ~ 0.3 ;若时间序列具有迅速且明显的变动倾向, 则α应取大一些,如0.6 ~ 0.9。实质上,α是一个经验数据,通过多个值进行试算比较而定,哪个α值引起的预测误差小,就采用哪个。

    ps:发现网络上都是把三次指数平滑法和holt-winters当同一个东西,但是有的三次指数平滑公式又不一样0-0,稍微查了一下资料,上面的三次指数平滑法是布朗指数平滑。下面的又是另一种。

    Holt-Winters

    Holt-Winters季节性方法包括预测方程和三个平滑方程-一个水平(level)的,一个趋势方程,一个用于季节性成分 ,具有相应的平滑参数 。我们用表示季节性的频率,即一年中的季节数。例如,对于季度数据L=4,对于每年的中的月则是

    「加法模型」

    「乘法模型」

    其中数据平滑因子,0 <<1,β是趋势平滑因子,0 季节变化平滑因子,0 <<1-a(这里是数据平滑因子alpha)。

    以加法模型来解释一下几条平滑公式,乘法在意义上是一样的。

    首先是,代表的是经过季节修正的观测值()和无季节项预测值()之间的加权平均

    趋势方程是基于的估计趋势与上一期估计趋势的加权平均

    季节方程是当前季节和上一个季节同期值的加权平均值,我个人对季节项的前半部分理解是独立出季节分量

    预测方程部分下标意思是确保用于预测的季节性指数的估算值来自样本的最后一组观测数据。

    初始趋势估计的一般公式为:

    i = 1,2,...,L设置季节性指数的初始估计会涉及更多。如果N是数据中存在的完整循环数(the number of complete cycles),则:

    其中

    一个是平均值个数据的周期。

    「衰减模型」

    增加阻尼系数作用与趋势,随着预测时间长度的增加而减弱趋势。这通常会提高预测的准确性。

    python代码

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    import seaborn as sns
    #导入库
    from statsmodels.tsa.holtwinters import ExponentialSmoothing

    #生成sin数据
    data = pd.DataFrame()
    a = np.linspace(-1010100)
    b = np.sin(a)
    data['sin']=b

    train,test = data.iloc[:80,0],data.iloc[79:,0]


    model = ExponentialSmoothing(train,seasonal='add',seasonal_periods=31).fit()
    pred = model.predict(start=test.index[0],end=test.index[-1])

    fig=plt.figure(figsize=(12,6))
    plt.plot(train.index,train,label='train')
    plt.plot(test.index,test,label='test')
    plt.plot(pred.index,pred,label='Holt-Winters')
    plt.legend(loc='best')
    plt.show()
    77825dda230c0d45f81b1b83e433d777.png
    image-20200925184544024

    「seasonal_periods」参数的作用就是季节波动,这里设置的是31,几乎完美拟合曲线

    指数平滑法的组合分类

    指数平滑法可以通过组合季节或趋势变换成不同的方法

    fe1be128e6b61c7d153ba8b28db22e89.png
    img

    Reference

    1. https://wiki.mbalib.com/wiki/%E6%8C%87%E6%95%B0%E5%B9%B3%E6%BB%91%E6%B3%95#.EF.BC.88.E4.B8.89.EF.BC.89_.E4.B8.89.E6.AC.A1.E6.8C.87.E6.95.B0.E5.B9.B3.E6.BB.91.E9.A2.84.E6.B5.8B
    2. https://en.wikipedia.org/wiki/Exponential_smoothing#Triple_exponential_smoothing_(Holt_Winters)
    3. https://otexts.com/fpp2/taxonomy.html
    展开全文
  • 移动平均移动平均法是一组最近实际数据来预测未来一期或几期内目标值常用方法。移动平均法适用于即期预测,当时间序列不会快速变化,且不存在季节性因素时候,移动平均法能有效地消除预测中...

    移动平均

    移动平均法是用一组最近的实际数据来预测未来一期或几期内目标值的常用方法。移动平均法适用于即期预测,当时间序列不会快速变化,且不存在季节性因素的时候,移动平均法能有效地消除预测中的随机波动,对序列具有修匀或平滑作用。

    简单移动平均

    是下一期的预测值,代表移动窗口大小,代表的是前n期实际值

    公式浅显易懂

    缺点也显而易见,历史所有时间点对现在的影响权重都一样

    加权移动平均

    代表第t期的权重

    权重的选择是个分析活,需要根据数据的特点进行选择,考虑数据的时间粒度,是否具有周期性等等。一般来说,近期数据对未来更有预测意义,但是如果近期数据存在异常数据,则预测的时候会出现问题,但是期数变多的话,虽然会使得序列更平滑,但是也使得预测值对数据的实际波动不敏感。

    如果序列具有季节性,移动平均的项数N与季节波动长度一致才可以消除季节波动,当序列具有周期性的时候同样道理。

    移正平均

    移动平均项数k为奇数,其移动平均值为移动平均项数中间一期的数值。如果是偶数,则再需要对相邻两个平均值的移动平均,就能使得平均值对正某一时期了。(对于简单移动平均来说)

    很简单的,序列13579,移动平均值就是5

    移动平均线

    移动平均最常见的使用就是在股市中了,将一定时期内的证券价格(指数)「加以平均」,并把不同时间的平均值连接起来,形成一根MA,用以观察证券价格变动趋势的一种技术指标

    image-20200925174725577

    很有趣的是,可以从股市规律来学习移动平均的数学规律。

    「滞后性」

    因为移动平均是根据历史数据来计算的,存在一定滞后性,所以有可能错过一些股价变动的信号

    「趋势性」

    移动平均线最大的特点是能够消除一些季节或周期波动,直观地显示趋势,所以可以从大趋势去进行鞠策

    指数加权移动平均

    指数加权移动平均(ewma)是以指数级递减加权的移动平均,各数值的权重随时间呈指数式递减,时间越靠近当前时刻的数据加权影响力越大。

    ewma与MA的区别是,MA通常是以某个大小的时间窗口去计算,而ewma是计算所有样本的,但是会强调当前样本的重要性,逐渐淡化历史样本的重要程度。

    「公式:」

    python代码

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    
    #生成均匀分布数据
    data = pd.DataFrame()
    data['sample'] = np.random.normal(size=100)
    
    #简单移动平均
    data['MA5'] = data['sample'].rolling(window=5).mean()
    data['MA10'] = data['sample'].rolling(window=10).mean()
    #指数加权移动平均
    data['EWMA5'] = data['sample'].ewm(span=5).mean()
    data['EWMA10'] = data['sample'].ewm(span=10).mean()
    
    data[['sample','MA5','MA10','EWMA5','EWMA10']].plot(subplots=False, figsize=(12,6), grid=True)
    
    
    image-20200925181921625

    指数平滑

    一次指数平滑

    当时间序列无明显的趋势变化,可用一次指数平滑预测。

    代表t期平滑值

    代表平滑常数

    代表t-1期实际值

    二次指数平滑

    一次指数平滑直接利用平滑值作为预测值,二次指数平滑法则利用平滑值对趋势进行修正得到一个线性平滑模型,适用于具有线性趋势的时间序列

    是线性平滑模型参数

    是第t期二次指数平滑值

    是第t+m期的预测值

    m为预测超前期数

    三次指数平滑

    三次指数平滑是在二次的基础上再平滑

    最后这里的则是三次指数平滑法的t+m期预测值

    「趋势调整」

    一段时间内收集到的数据如果呈现出上升或下降趋势将导致指数预测滞后于实际需求,通过趋势调整,添加趋势修正项,可以在一定程度上改进指数预测效果。

    进行趋势调整的指数平滑预测有三个步骤:

    1、 利用前面介绍的方法计算第t期的简单指数平滑预测

    2、 计算趋势。其公式为:

    其中,

    =第t期经过平滑的趋势;

    =第t期上期经过平滑的趋势;

    b=选择的趋势平滑系数;

    =对第t期简单指数平滑预测;

    =对第t期上期简单指数平滑预测。

    3、计算趋势调整后的指数平滑预测值.计算公式为:

    的确定」

    α值是根据时间序列的变化特性来选取的。若时间序列的波动不大,比较平稳,则α应取小一些,如0.1 ~ 0.3 ;若时间序列具有迅速且明显的变动倾向, 则α应取大一些,如0.6 ~ 0.9。实质上,α是一个经验数据,通过多个值进行试算比较而定,哪个α值引起的预测误差小,就采用哪个。

    ps:发现网络上都是把三次指数平滑法和holt-winters当同一个东西,但是有的三次指数平滑公式又不一样0-0,稍微查了一下资料,上面的三次指数平滑法是布朗指数平滑。下面的又是另一种。

    Holt-Winters

    Holt-Winters季节性方法包括预测方程和三个平滑方程-一个水平(level)的,一个趋势方程,一个用于季节性成分 ,具有相应的平滑参数 。我们用表示季节性的频率,即一年中的季节数。例如,对于季度数据L=4,对于每年的中的月则是

    「加法模型」

    「乘法模型」

    其中数据平滑因子,0 <<1,β是趋势平滑因子,0 <β<1,季节变化平滑因子,0 <<1-a(这里是数据平滑因子alpha)。

    以加法模型来解释一下几条平滑公式,乘法在意义上是一样的。

    首先是,代表的是经过季节修正的观测值()和无季节项预测值()之间的加权平均

    趋势方程是基于的估计趋势与上一期估计趋势的加权平均

    季节方程是当前季节和上一个季节同期值的加权平均值,我个人对季节项的前半部分理解是独立出季节分量

    预测方程部分下标意思是确保用于预测的季节性指数的估算值来自样本的最后一组观测数据。

    初始趋势估计的一般公式为:

    i = 1,2,...,L设置季节性指数的初始估计会涉及更多。如果N是数据中存在的完整循环数(the number of complete cycles),则:

    其中

    一个是平均值个数据的周期。

    「衰减模型」

    增加阻尼系数作用与趋势,随着预测时间长度的增加而减弱趋势。这通常会提高预测的准确性。

    python代码

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    import seaborn as sns
    #导入库
    from statsmodels.tsa.holtwinters import ExponentialSmoothing
    
    #生成sin数据
    data = pd.DataFrame()
    a = np.linspace(-10, 10, 100)
    b = np.sin(a)
    data['sin']=b
    
    train,test = data.iloc[:80,0],data.iloc[79:,0]
    
    
    model = ExponentialSmoothing(train,seasonal='add',seasonal_periods=31).fit()
    pred = model.predict(start=test.index[0],end=test.index[-1])
    
    fig=plt.figure(figsize=(12,6))
    plt.plot(train.index,train,label='train')
    plt.plot(test.index,test,label='test')
    plt.plot(pred.index,pred,label='Holt-Winters')
    plt.legend(loc='best')
    plt.show()
    
    image-20200925184544024

    「seasonal_periods」参数的作用就是季节波动,这里设置的是31,几乎完美拟合曲线

    指数平滑法的组合分类

    指数平滑法可以通过组合季节或趋势变换成不同的方法

    img

    Reference

    1. https://wiki.mbalib.com/wiki/%E6%8C%87%E6%95%B0%E5%B9%B3%E6%BB%91%E6%B3%95#.EF.BC.88.E4.B8.89.EF.BC.89_.E4.B8.89.E6.AC.A1.E6.8C.87.E6.95.B0.E5.B9.B3.E6.BB.91.E9.A2.84.E6.B5.8B

    2. https://en.wikipedia.org/wiki/Exponential_smoothing#Triple_exponential_smoothing_(Holt_Winters)

    3. https://otexts.com/fpp2/taxonomy.html

      公众号:AI蜗牛车

      保持谦逊、保持自律、保持进步

    展开全文
  • 一、定义:MACD称为指数平滑移动平均线,是从双指数移动平均线发展而来,由快指数移动平均线(EMA12)减去慢指数移动平均线(EMA26)得到快线DIF,再2×(快线DIF-DIF9日加权移动均线DEA)得到MACD柱。...
  • 移动平均法很简单,就是最近数据预测未来短时间内数据。有简单移动平均法,真很简单,就是最近一组数据,去平均,作为下一时刻预测: Si=(xi−1+xi−2+...+xi−n)/nS_i = (x_{i-1} + x_{i-2} + ...+ x...
  • 移动平均法是一组最近实际数据值来预测未来一期或几期内公司产品需求量、公司产能等一种常用方法。移动平均法适用于即期预测。当产品需求既不快速增长也不快速下降,且不存在季节性因素
  • 假设要前三个月(7,8,9月)销售预测本月(10月)销售额,使用简单移动平均法,计算方法如下:Y10 = (X7 + X8+ X9) / 3 Y10代表10月预测值,X7代表7月实际值计算很简单,但就实际情况来说,预测当月销售额...
  • R计算移动平均的方法

    千次阅读 2017-11-14 20:40:54
    移动平均可以使时间序列变平滑,是典型有序计算问题,其基本算法是:将 N 个连 续时间序列成员作为一个集合, 计算该集合平均值, 并逐项推移该集合。 下面一个例 子来说明 R 计算移动平均的方法。...
  • 移动平均法详解

    千次阅读 2018-03-10 20:05:00
     移动平均法是一组最近实际数据值来预测未来一期或几期内公司产品需求量、公司产能等一种常用方法。移动平均法适用于即期预测。当产品需求既不快速增长也不快速下降,且不存在季节性因素时,移动平均法能...
  • R语言计算移动平均的方法

    千次阅读 2014-10-13 11:53:50
    移动平均可以使时间序列变平滑,是典型有序计算问题,其基本算法是:将N个连续时间序列成员作为一个集合,计算该集合平均值,并逐项推移该集合。下面一个例子来说明R计算移动平均的方法。案例描述:数据框...
  • 要使用平滑因子计算数据exponential smoothing(在维基百科中是(1 - alpha)):>>> alpha = 0.5>>> assert 0 < alpha <= 1.0>>> av = sum(alpha**n.days * iq... for n, iq in map...
  • 移动平均法是一组最近实际数据值来预测未来一期或几期内产品需求量一种常用方法。移动平均法适用于即期预测。当产品需求既不快速增长也不快速下降,且不存在季节性因素时,移动平均法能有效地消除预测中...
  • Excel-移动平均分析及预测分析

    万次阅读 2018-06-08 11:34:21
    一、背景说明移动平均法是一组最近实际数据值...移动平均法根据预测时使用各元素权重不同,可以分为:简单移动平均和加权移动平均参考百度百科:移动平均移动平均法是一种简单平滑预测技术,它基本思想...
  •  移动平均法是一组最近实际数据值来预测未来一期或几期内公司产品需求量、公司产能等一种常用方法。移动平均法适用于即期预测。当产品需求既不快速增长也不快速下降,且不存在季节性因素时,移动平均法能...
  •  移动平均法是一组最近实际数据值来预测未来一期或几期内公司产品需求量、公司产能等一种常用方法。移动平均法适用于即期预测。当产品需求既不快速增长也不快速下降,且不存在季节性因素时,移动平均法能...
  • ema其公式为:([[或参考百度百科](https://baike.baidu.com/item/EMA/12646151?fr=aladdin "")](https://baike.baidu.com/item/EMA/12646151?fr=aladdin "")) ... 此处计算a的移动平均值ema print(ema)
  • 2D中的移动平均线 比较过滤结果 我们来谈谈比较过滤结果。 我采用了十个随机整数的向量,并将它们绘制成线图, 然后我长度为5的均匀滤波器、非均匀加权滤波器过滤矢量并绘制结果:  你能弄三种不同的颜色...
  • 数学---之EMA (指数移动平均值)

    千次阅读 2019-06-24 17:13:26
    也叫EXPMA指标,它也是一种趋向类指标,指数移动平均值是以指数式递减加权的移动平均。 理解了MA、EMA的含义后,就可以理解其用途了,简单的说,当要比较数值与均价的关系时,MA就可以了,而要比较均价的趋势快慢...
  • 移动搜索法(FCA)是以某点为中心画一个圆或正方形作为滤波窗口,窗口内的平均值(或数值密度)作为该点值。将窗口在研究区内移动,直到得到所有位置的平均值。平均变动性较小,从而实现空间上的平滑效果。...
  • 预测算法——指数平滑

    万次阅读 多人点赞 2016-07-21 12:59:03
    指数平滑法是移动平均法中一种,其特点在于给过去观测值不一样权重,即较近期观测值权数比较远期观测值权数要大。根据平滑次数不同,指数平滑法分为一次指数平滑法、二次指数平滑法和三次指数平滑法等。但...
  • 指数平滑

    千次阅读 2017-01-05 17:35:26
    指数平滑法是生产预测中常用一种方法。...而指数平滑法则兼容了全期平均和移动平均所长,不舍弃过去数据,但是仅给予逐渐减弱影响程度,即随着数据远离,赋予逐渐收敛为零权数。如下表为2005
  • 简单移动平均用的是算术平均数,近期数据对预测值的影响比远期数据要大一些,而且越近的数据影响越大。指数平滑法正是考虑了这一点,并将其权值按指数递减的规律进行分配,越接近当前的数据,权重越大;反之,远离...
  • 想山寨一个空中管制(Air control lite)游戏自己玩...找了一个 比较简单方法:用移动平均平滑处理 [code="java"] --//平滑处理, 用移动平均值 --self.x,self.y是从触屏取得一长串坐标 loc...
  • 指数平滑法 及 JavaAPI

    2019-04-12 08:50:10
    一、简介 指数平滑法是生产预测中常用一种方法。...而指数平滑法则兼容了全期平均和移动平均所长,不舍弃过去数据,但是仅给予逐渐减弱影响程度,即随着数据远离,赋予逐渐收敛为零权数。 ...
  • python构建指数平滑预测模型

    万次阅读 热门讨论 2017-04-14 16:31:29
    简单移动平均用的是算术平均数,近期数据对预测值的影响比远期数据要大一些,而且越近的数据影响越大。指数平滑法正是考虑了这一点,并将其权值按指数递减的规律进行分配,越接近当前的数据,权重越大;反之,远离...
  • 1、什么是指数平滑法 指数平滑法是生产预测中常用一种方法。也用于中短期经济发展...而指数平滑法则兼容了全期平均和移动平均所长,不舍弃过去数据,但是仅给予逐渐减弱影响程度,即随着数据远离,赋予逐渐收
  • 数据挖掘——时间序列算法前言一、平滑法1、简述2、移动平均法2.1、简单移动平均2.2、加权移动平均法3、指数平滑法 前言 时间序列是许多数据挖掘任务重最常见类型之一,同时也比较难处理。这篇记录下我所理解下...

空空如也

空空如也

1 2 3 4 5 6
收藏数 120
精华内容 48
关键字:

平滑用的移动平均