精华内容
下载资源
问答
  • 滑动平均

    2019-03-09 10:29:03
    滑动平均 滑动平均(影子值):记录了每个参数一段时间内过往值的平均,增加了模型了泛化性。 shadow_variable = decay × shadow_variable + (1-decay)× variable 其中: shadow_variable :影子变量 ...

    滑动平均

    滑动平均(影子值):记录了每个参数一段时间内过往值的平均,增加了模型了泛化性。

                      shadow_variable = decay × shadow_variable + (1-decay) × variable

    其中:

    shadow_variable :影子变量

    variable:待更新的变量

    decay:衰减率,衰减率决定了模型更新的速度

    tensorFlow中的使用

    import tensorflow as tf
    import os
    os.environ["TF_CPP_MIN_LOG_LEVEL"] = "2"  # 忽略tensorflow警告信息
    
    MOVING_AVERAGE_DECAY = 0.99 #滑动衰减率为0.99,
    
    v1 = tf.Variable(0,dtype=tf.float32) #变量赋初值
    step = tf.Variable(0,trainable=False) #计数器
    
    #定义一个滑动平均的类
    ema = tf.train.ExponentialMovingAverage(MOVING_AVERAGE_DECAY,step)
    ema_op = ema.apply([v1]) #定义一个更新变量滑动平均的操作,这里给的是一个列表,每次执行,都会更新。
    
    with tf.Session() as sess:
        #初始化全部变量
        init_op = tf.global_variables_initializer()
        sess.run(init_op)
    
        #通过ema.average(v1)获得滑动平均后的变量的值
        print(sess.run([v1,ema.average(v1)]))
        #输出[0.0,0.0]
    
        #更新参数v1
        sess.run(tf.assign(v1,5))
        sess.run(ema_op) #执行一次更新
        print(sess.run([v1,ema.average(v1)]))
        #输出结果[5.0, 4.5]
    
        sess.run(ema_op)
        print(sess.run([v1, ema.average(v1)]))
        #输出结果:[5.0, 4.95]
    
        #更新step的值
        sess.run(tf.assign(step,10000))
        sess.run(tf.assign(v1,10))
        sess.run(ema_op)
        print(sess.run([v1,ema.average(v1)]))
        #输出[10.0, 5.0004997]
    
        sess.run(ema_op)
        print(sess.run([v1,ema.average(v1)]))
        #输出[10.0, 5.0504947]

    在使用,经常使用一下结构

    #(1)    
    ema = tf.train.ExponentialMovingAverage(MOVING_AVERAGE_DECAY,global_step)
    #MOVING_AVERAGE_DECAY 衰减率
    #global_step 当前轮数
    #(2)
    ema_op = ema.apply([]) #填入待更新的参数,这里以列表的形式
    #(3)
    with tf.control_dependencies([train_step,ema_op]):
        train_op = tf.no_op(name='train')

     

    展开全文
  • 自回归滑动平均模型(ARMA) 如果时间序列 满足: 则称时间序列 为服从(p,q)阶自回归滑动平均混合模型。或者记为φ( B) = θ( B) >>>关于作者 CSDN 博客专家,2019-CSDN百大博主,计算机(机器学习方向)博士在读,...

    任何关于算法、编程、AI行业知识或博客内容的问题,可以随时扫码关注公众号「图灵的猫」,加入”学习小组“,沙雕博主在线答疑~此外,公众号内还有更多AI、算法、编程和大数据知识分享,以及免费的SSR节点和学习资料。其他平台(知乎/B站)也是同名「图灵的猫」,不要迷路哦~

     

     

    什么是移动平均法?

      移动平均法是用一组最近的实际数据值来预测未来一期或几期内公司产品的需求量、公司产能等的一种常用方法。移动平均法适用于即期预测。当产品需求既不快速增长也不快速下降,且不存在季节性因素时,移动平均法能有效地消除预测中的随机波动,是非常有用的。移动平均法根据预测时使用的各元素的权重不同

      移动平均法是一种简单平滑预测技术,它的基本思想是:根据时间序列资料、逐项推移,依次计算包含一定项数的序时平均值,以反映长期趋势的方法。因此,当时间序列的数值由于受周期变动和随机波动的影响,起伏较大,不易显示出事件的发展趋势时,使用移动平均法可以消除这些因素的影响,显示出事件的发展方向与趋势(即趋势线),然后依趋势线分析预测序列的长期趋势。

      移动平均法的种类

      移动平均法可以分为:简单移动平均和加权移动平均。

      一、简单移动平均法

      简单移动平均的各元素的权重都相等。简单的移动平均的计算公式如下: Ft=(At-1+At-2+At-3+…+At-n)/n式中,

      ·Ft–对下一期的预测值;

      ·n–移动平均的时期个数;

      ·At-1–前期实际值;

      ·At-2,At-3和At-n分别表示前两期、前三期直至前n期的实际值。 
      

      二、加权移动平均法

      加权移动平均给固定跨越期限内的每个变量值以不同的权重。其原理是:历史各期产品需求的数据信息对预测未来期内的需求量的作用是不一样的。除了以n为周期的周期性变化外,远离目标期的变量值的影响力相对较低,故应给予较低的权重。加权移动平均法的计算公式如下:

      Ft=w1At-1+w2At-2+w3At-3+…+wnAt-n式中,

      ·w1–第t-1期实际销售额的权重;

      ·w2–第t-2期实际销售额的权重;

      ·wn–第t-n期实际销售额的权

      ·n–预测的时期数;w1+ w2+…+ wn=1

      在运用加权平均法时,权重的选择是一个应该注意的问题。经验法和试算法是选择权重的最简单的方法。一般而言,最近期的数据最能预示未来的情况,因而权重应大些。例如,根据前一个月的利润和生产能力比起根据前几个月能更好的估测下个月的利润和生产能力。但是,如果数据是季节性的,则权重也应是季节性的。

      移动平均法的优缺点

      使用移动平均法进行预测能平滑掉需求的突然波动对预测结果的影响。但移动平均法运用时也存在着如下问题:

      1、加大移动平均法的期数(即加大n值)会使平滑波动效果更好,但会使预测值对数据实际变动更不敏感;

      2、移动平均值并不能总是很好地反映出趋势。由于是平均值,预测值总是停留在过去的水平上而无法预计会导致将来更高或更低的波动;

      3、移动平均法要由大量的过去数据的记录。

      移动平均法案例分析 
       
      简单移动平均法在房地产中的运用 
    某类房地产2001年各月的价格如下表中第二列所示。由于各月的价格受某些不确定因素的影响,时高时低,变动较大。如果不予分析,不易显现其发展趋势。如果把每几个月的价格加起来计算其移动平均数,建立一个移动平均数时间序列,就可以从平滑的发展趋势中明显地看出其发展变动的方向和程度,进而可以预测未来的价格。

      在计算移动平均数时,每次应采用几个月来计算,需要根据时间序列的序数和变动周期来决定。如果序数多,变动周期长,则可以采用每6个月甚至每12个月来计算;反之,可以采用每2个月或每5个月来计算。对本例房地产2001年的价格,采用每5个月的实际值计算其移动平均数。计算方法是:把1~5月的价格加起来除以5得684元/平方米,把2~6月的价格加起来除以5得694元/平方米,把3~7月的价格加起来除以5得704元/平方米,依此类推,见表中第三列。再根据每5个月的移动平均数计算其逐月的上涨额,见表中第四列。 
      这里写图片描述

    假如需要预测该类房地产2002年1月的价格,则计算方法如下:由于最后一个移动平均数762与2002年1月相差3个月,所以预测该类房地产2002年1月的价格为:762 + 12 × 3 =798(元/平方米)

     

    ARMA

    自回归滑动平均模型(ARMA 模型,Auto-Regressive and Moving Average Model)是研究时间序列的重要方法,由自回归模型(简称AR模型)与滑动平均模型(简称MA模型)为基础“混合”构成。在市场研究中常用于长期追踪资料的研究,如:Panel研究中,用于消费行为模式变迁研究;在零售研究中,用于具有季节变动特征的销售量、市场规模的预测等。
    ARMA模型(auto regressive moving average model)自回归滑动平均模型,模型参量法高分辨率谱分析方法之一。这种方法是研究平稳随机过程有理谱的典型方法,适用于很大一类实际问题。它比AR模型法与MA模型法有较精确的谱估计及较优良的谱分辨率性能,但其参数估算比较繁琐。ARMA模型参数估计的方法很多:
    如果模型的输入序列{u(n)}与输出序列{a(n)}均能被测量时,则可以用最小二乘法估计其模型参数,这种估计是线性估计,模型参数能以足够的精度估计出来;
    许多谱估计中,仅能得到模型的输出序列{x(n)},这时,参数估计是非线性的,难以求得ARMA模型参数的准确估值。从理论上推出了一些ARMA模型参数的最佳估计方法,但它们存在计算量大和不能保证收敛的缺点。因此工程上提出次最佳方法,即分别估计AR和MA参数,而不像最佳参数估计中那样同时估计AR和MA参数,从而使计算量大大减少。

     

     

    ARMA模型分为以下三种:

    自回归模型(AR:Auto-regressive)
    如果时间序列
      
    满足
    其中
     
    是独立同分布的随机变量序列,且满足
    以及 E(
      
    ) = 0
    则称时间序列
    为服从p阶的自回归模型。
    自回归模型的平稳条件:
    滞后算子多项式
    的根均在单位圆外,即φ(B) = 0的根大于1。
    移动平均模型(MA:Moving-Average)
    如果时间序列
      
    满足
    ,则称时间序列
      
    为服从q阶移动平均模型;
    移动平均模型平稳条件:任何条件下都平稳。
    自回归滑动平均模型(ARMA)
    如果时间序列
      
    满足:
    则称时间序列
     
    为服从(p,q)阶自回归滑动平均混合模型。或者记为φ(B)
    = θ(B)

     

    >>>关于作者

    CSDN 博客专家,2019-CSDN百大博主,计算机(机器学习方向)博士在读,业余Kaggle选手,有过美团、腾讯算法工程师经历,目前就职于Amazon AI lab。喜爱分享和知识整合。

    关注微信公众号,点击“学习资料”菜单即可获取算法、编程资源以及教学视频,还有免费SSR节点相送哦。其他平台(微信/知乎/B站),欢迎关注同名公众号「图灵的猫」~

     

    展开全文
  • 滑动平均模型概述: 主要是控制衰减率来控制参数更新前后之间的差距,从而达到减缓参数的变化值(比如:参数更新前是5,更新后是4,通过滑动平均模型之后,参数的值会在4到5之间)对于MovingAverage的解释: 在统计学中,移动...

    770678c5d7a65c49cd791d11e04103e3.png

    滑动平均模型概述:

    主要是控制衰减率来控制参数更新前后之间的差距,从而达到减缓参数的变化值(比如:参数更新前是5,更新后是4,通过滑动平均模型之后,参数的值会在4到5之间)

    对于MovingAverage的解释:

    在统计学中,移动平均通过建立整个数据集中的一系列子集的平均值来分析数据点的计算方法。这种方法通常用在时间序列分析中,例如股票涨跌这样的数据都是离散的,有波动的,为了更容易分析,因此可以把这样的数据做移动平均,这样可以使得小的波动更平滑,而又能显示出长期的整体趋势。在数学上这样的操作可以看做是“卷积”。既然moving average类似于卷积的操作,因此我们就可以在卷积核上做文章,最普通的卷积核就是每个数据的权重都相同,但是在实际中明显越近的数据价值越大,因此要让越近的数据权重越大,越远的数据权重越小.

    ExponentialMovingAverage函数:

    tensorflow中提供了tf.train.ExponentialMovingAverage来实现滑动平均模型:
    tf.train.ExponentialMovingAverage(decay,num_updates=None,zero_debias=False,

    name="ExponentialMovingAverage")

    在初始化ExponentialMovingAverage时,需要提供一个衰减率(decay)用于控制模型更新的速度.ExponentialMovingAverage对每一个变量会维护一个影子变量,(shadow_variable)

    这个影子变量的初始值就是相应变量的初始值,每次运行变量更新时,影子变量的值会更新为:

    shadow_variable=decay×shadow_variable+(1−decay)×variable

    这个算法的原理:平滑、滤波,即使数据平滑变化,通过调整参数来调整变化的稳定性

    shadow_variable为影子变量,variable为更新的变量,decay为衰减率,decay决定了模型更新的速度,decay越大模型越趋于稳定.在实际应用中,decay一般会设置为非常接近1 的数.为了使得模型在训练前期可以更新地更快.

    ExponentialMovingAverage提供了num_updates参数来动态设置decay的大小.如果在ExponentialMovingAverage初始化时提供了num_updates参数,那么每次使用的衰减概率为

    其中:

    由此得:(应该求导的,求导证明是单增的)

    num_updates的值越大,整个值就越大,那么decay在原decay与该值中就更倾向于选择原decay.

    反之亦反.

    开头说过,decay的值选择为0.9/0.99等较高的,接近1的值,而num_updates的值会选择为step(神经网络中迭代的轮数),这样,结合上面极限的结论(或许应该求导的.....我求了一下确实是递增的),step越大,decay就越会选择原decay,选择原decay的话,原shadow_variable的比重就会加大,那么shadow_variable的变化就不会太大(step与shadow_variable建立这种关系的目的....我还不太清楚,不知道跟上文所述卷积核/权重部分有没有关联)

    返回值:ExponentialMovingAverage对象,通过对象调用apply方法可以通过滑动平均模型来更新参数。

    代码:

    import tensorflow as tf
    
    #定义一个变量用于计算滑动平均,这个变量初始值为0,这里手动制定了变量
    v1 = tf.Variable(0,dtype=tf.float32)#---------------------------------------[1]
    #step变量模拟神经网络中迭代的轮数,可以用于动态控制衰减率  step-->num_update
    step = tf.Variable(0,trainable=False)
    
    #定义一个滑动平均的类(class).初始化时给定了衰减率(0.99)和控制衰减率的变量step
    Moving_average = tf.train.ExponentialMovingAverage(0.99,step)
    #定义一个更新变量滑动平均的操作
    #这里需要给定一个列表,每次执行这个操作时,这个列表中的变量都会被更新
    
    #更新v1
    maintain_averages_op = Moving_average.apply([v1])
    
    with tf.Session() as sess:
        #初始化所有变量
        init_op = tf.global_variables_initializer()#----------------------------[2]
        sess.run(init_op)
        
        #通过Moving_average.average(v1)获取滑动平均之后的取值
        #在初始化之后变量v1的值和v1的滑动平均都为0
        
        print(sess.run([v1,Moving_average.average(v1)]))
        
        #更新变量v1的值到5
        sess.run(tf.assign(v1,5))#----------------------------------------------[3]
        #更新v1的滑动平均值,衰减率为min{0.99,(1+0)/(10+0)}=0.1  decay更新为0.1
        #v1的滑动平均值会更新为0.1x0+0.9x5=4.5
        sess.run(maintain_averages_op)
        print(sess.run([v1,Moving_average.average(v1)]))
        
        #更新step的值为10000
        sess.run(tf.assign(step,10000))
        #更新v1的值为10
        sess.run(tf.assign(v1,10))
        #衰减率变为min{0.99,(1+10000)/(10+10000)}=0.99
        #v1的滑动平均值更新为0.99x4.5+0.01x10=4.555
        sess.run(maintain_averages_op)
        print(sess.run([v1,Moving_average.average(v1)]))
        
        #再次更新滑动平均值
        sess.run(maintain_averages_op)
        print(sess.run([v1,Moving_average.average(v1)]))

    输出

    [0.0, 0.0]
    [5.0, 4.5]
    [10.0, 4.555]
    [10.0, 4.60945]

    函数:

    [1]tf.Variable(initial_value, trainable=True, collections=None, validateshape=True, name=None): 定义图变量initial_value:初始赋值;trainable:如果为True,会把它加入到GraphKeys.TRAINABLE_VARIABLES,才能对它使用Optimizer;collections:指定该图变量的类型、默认为[GraphKeys.GLOBAL_VARIABLES]

    [2]在TensorFlow的世界里,变量的定义和初始化是分开的,所有关于图变量的赋值和计算都要通过tf.Session的run来进行。想要将所有图变量进行集体初始化时应该使用tf.global_variables_initializer。

    [3]tf.assign(ref,value,validateshape=None,uselocking=None,name=None): 通过将value赋值给ref来更新ref,效果等同于ref=value

    参考:TensorFlow实践3:深层神经网络

    tf.train.ExponentialMovingAverage解析

    展开全文
  • 这篇文章为学习过程中的一些笔记和思考,同时帮助大家更好地理解时间序列分析中的定理和概念。上一篇文章介绍了AR(p)...1 滑动平均模型滑动平均模型其实是这样一种模型:由白噪声的有限线性组合来描述平稳序列,当...

    这篇文章为学习过程中的一些笔记和思考,同时帮助大家更好地理解时间序列分析中的定理和概念。


    上一篇文章介绍了AR(p)模型,这种模型描述了当前值与历史值的关系;但如果我们希望关注的不是历史观测值对于当前值的影响,而是自回归模型中误差项的累加,这个时候用另一种模型描述更为合适,这种模型就是滑动平均模型(MA(q))。

    1 滑动平均模型

    滑动平均模型其实是这样一种模型:由白噪声的有限线性组合来描述平稳序列,当k比q大的时候自协方差函数为零而

    ,此时就是q步相关的平稳序列。
    比如
    ,其特点就是
    时,

    1.1 MA(q)模型和MA(q)序列

    定义1.1 MA(q)模型

    是白噪声
    ,若

    其中

    , 则

    为q阶滑动平均模型,

    就是MA(q)序列。我们可以加强条件要求
    时也有
    ,这时候这个序列就是
    可逆MA(q)序列。
    1)可逆表明了
    可以相互线性表示

    既然有
    可以写作t时刻前观测值的线性和:
    这里利用了
    在z≤1时的Taylor展开式系数

    这个在可逆的时候可以用,也就真正说明了可逆的含义2)由于MA(q)序列是白噪声的有限滑动和,因此相比AR(p)振荡较轻,稳定性要好(自协方差函数截尾、谱密度平坦也可以体现这一点)

    定理1.1:MA(q)序列的自协方差函数是q后截尾的:

    且有谱密度:

    计算上我们可以直接算出自协方差函数(令
    以及算出
    ):

    引理2.1:设

    使得
    ,则有唯一的实系数多项式

    使得

    这里很显然我们可以用根与系数关系得到
    ,引理的证明主要是用
    的对称性,2q个根中如果z是根则其倒数也必是根。所以只需要取其中那个不在单位圆内的根就可以组成

    定理1.3:零均值平稳序列

    有自协方差函数
    ,则是MA(q)序列的充分必要条件是
    1)证明:使用线性滤波的谱密度公式2)这个定理说明零均值平稳序列,如果自协方差函数q后截尾,则这个平稳序列一定是MA(q)序列。

    关于最小序列、MA(q)序列递推求解以及MA(q)序列举例内容可参考何书元《时间序列分析》P92-96

    2 自回归滑动平均模型

    如果我既希望考虑过去的观测,又希望考虑误差项,那么可以把上述两种模型整合起来,这便是ARMA模型的想法。

    2.1 ARMA(p,q)模型及其平稳解

    定义2.1 ARMA(p,q)模型

    是白噪声
    ,有:

    是一个自回归滑动平均模型,同样,如果要求B(z)在单位圆上也无根,则为可逆的ARMA模型。

    定理2.1

    定义的平稳序列

    是ARMA(p,q)模型的唯一平稳解。
    这里
    就是
    的Wold系数,也是
    的Taylor展开系数。

    2.2 ARMA(p,q)序列的自协方差函数

    可以通过ARMA模型的参数递推计算:
    规定
    ,证明使用级数乘法的比较系数。

    2.3 ARMA(p,q)模型的可识别性

    定理2.3:设

    为ARMA(p,q)序列
    的自协方差函数列,则m≥p时,矩阵
    可逆。

    1) A(z)和B(z)没有公因子,则模型参数
    可由平稳解的自协方差函数唯一决定。
    2) 只要
    可逆,则ARMA(p,q)序列的自协方差函数和模型参数可相互唯一决定
    3) 这个定理为ARMA模型参数的矩估计提供了理论保证

    定理2.4:设零均值平稳序列

    有自协方差函数
    ,有系数使得
    满足最小相位条件和

    是一个
    序列,其中p'≤p,q'≤q。

    2.4 ARMA(p,q)序列的谱密度和可逆性

    有理谱密度:由于ARMA序列的自协方差函数绝对可和,所以有谱密度:

    3 广义ARMA模型和ARIMA(p,d,q)模型介绍

    接下来还有几种常见的时间序列模型值得介绍:

    3.1 广义ARMA模型

    没有公共根,
    而没有其他限制,则差分方程

    为广义ARMA(p,q)模型

    1) 给定初值
    可以由系数和白噪声递推出之后的x
    2) A(Z)在单位圆上有根,则没有平稳解;在单位圆上没有根时有唯一平稳解
    然而如果在单位圆内有根,则t的观测受到t以后白噪声的影响(双边无穷滑动和),同时解随着时间增加而加速振荡(爆炸模型)

    3.2 求和ARIMA(p,d,q)模型

    d为正整数,

    是一个ARMA(p,q)序列,就称
    是一个求和ARIMA(p,d,q)模型:

    1) 这里A、B满足的条件和ARMA相同实质上就是对观察数据进行d次差分处理2) d通常取1或2,
    是非平稳序列

    参考文献:

    [1] 何书元.应用时间序列分析[M]北京大学出版社.2014


    回到目录

    展开全文
  • 移动平均与滑动平均

    2020-07-31 11:15:46
    移动平均与滑动平均 ** 对一组数据按照指定的窗口长度求平均,就是移动平均。之后,对移动平均再求平均即为滑动平均滑动平均一般在气象数据统计时使用。 参考: https://zhidao.baidu.com/question/78643267.html ...
  • 指数滑动平均

    2020-12-30 17:25:51
    参考 滑动平均模型。
  • 滑动平均模型

    千次阅读 多人点赞 2019-03-01 10:23:39
    TensorFlow中的滑动平均模型使用的是滑动平均(Moving Average)算法,又称为指数加权移动平均算法(exponenentially weighted average),这也是ExponentialMovingAverage()函数的名称由来。 先来看...
  • 滑动平均算法

    2012-10-12 10:00:46
    实现滑动平均算法
  • 滑动平均滤波

    万次阅读 多人点赞 2018-05-30 14:42:05
    滑动平均滤波,窗口长度为6; matlab窗口长度6进行滤波,输入为512点,输出为507点,最后几个点未进行处理; 滑动平均后,波形中的小波动消失; 用于平滑噪声: matlab :code function T1 = huadong( d_...
  • 滑动平均滤波代码,可用于matlab中相关数据的滤波处理,可以自行更改程序中的m自变量以更改滑动的窗宽
  • 滑动平均信号预处理

    2013-01-29 13:27:53
    滑动平均 信号 预处理 滑动平均 信号 预处理
  • 滑动平均原理

    2019-08-06 17:27:34
    滑动平均算法的原理 举个例子,这个例子来自吴恩达老师的deep learning课程中。给出一个连续365天的温度数据,如图所示,横坐标为天数,纵坐标是温度。 可以看到这些数据是很不平滑的,会让拟合出来的模型难以具有...
  • 参考 理解滑动平均(exponential moving average)
  • 1方格网上观测数据的窗口滑动平均处理一.题目要求已知M行N列方格网上的观测数据,为了压制其中的高频干扰信号,使个观测点之间的数据平滑过渡,要求编写程序对该方格网上的数据进行窗口滑动平均处理。所谓窗口滑动...
  • 问题描述:待处理的数据格式:两列衰减数据-OM2S2和VNA分别采集的绘图效果:两条衰减谱-红色VNA-蓝色OM2S2目的:打算对蓝色曲线做滑动平均平滑报错截图报错内容:segment size has to be less than or equal to the ...
  • Matlab求滑动平均
  • C#实现滑动平均

    2020-08-12 09:12:46
    C#实现滑动平均
  • 滑动平均会为目标变量维护一个影子变量,影子变量不影响原变量的更新维护,但是在测试或者实际预测过程中(非训练时),使用影子变量代替原变量。 1、滑动平均求解对象初始化 ema = tf.train....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,891
精华内容 756
关键字:

滑动平均