指数加权平均数

比如这儿有去年伦敦的每日温度,所以1月1号,温度是40华氏度,相当于4摄氏度。世界上大部分地区使用摄氏度,但是美国使用华氏度。在1月2号是9摄氏度等等。在年中的时候,一年365天,年中就是说,大概180天的样子,也就是5月末,温度是60华氏度,也就是15摄氏度等等。夏季温度转暖,然后冬季降温。

用数据作图,可以得到以下结果,起始日在1月份,这里是夏季初,这里是年末,相当于12月末。

这里是1月1号,年中接近夏季的时候,随后就是年末的数据,看起来有些杂乱,如果要计算趋势的话,也就是温度的局部平均值,或者说移动平均值。

要做的是,首先使\(v_{0} =0\),每天,需要使用0.9的加权数之前的数值加上当日温度的0.1倍,即\(v_{1} =0.9v_{0} + 0.1\theta_{1}\),所以这里是第一天的温度值。

第二天,又可以获得一个加权平均数,0.9乘以之前的值加上当日的温度0.1倍,即\(v_{2}= 0.9v_{1} + 0.1\theta_{2}\),以此类推。

第二天值加上第三日数据的0.1,如此往下。大体公式就是某天的\(v\)等于前一天\(v\)值的0.9加上当日温度的0.1。

如此计算,然后用红线作图的话,便得到这样的结果。

得到了移动平均值,每日温度的指数加权平均值。

看一下上面的公式,\(v_{t} = 0.9v_{t - 1} +0.1\theta_{t}\),把0.9这个常数变成\(\beta\),将之前的0.1变成\((1 - \beta)\),即\(v_{t} = \beta v_{t - 1} + (1 - \beta)\theta_{t}\)

由于以后要考虑的原因,在计算时可视\(v_{t}\)大概是\(\frac{1}{(1 -\beta)}\)的每日温度,如果\(\beta\)是0.9,会想,这是十天的平均值,也就是红线部分。

来试试别的,将\(\beta\)设置为接近1的一个值,比如0.98,计算\(\frac{1}{(1 - 0.98)} =50\),这就是粗略平均了一下,过去50天的温度,这时作图可以得到绿线。

这个高值\(\beta\)要注意几点,得到的曲线要平坦一些,原因在于多平均了几天的温度,所以这个曲线,波动更小,更加平坦,缺点是曲线进一步右移,因为现在平均的温度值更多,要平均更多的值,指数加权平均公式在温度变化时,适应地更缓慢一些,所以会出现一定延迟,因为当\(\beta=0.98\),相当于给前一天的值加了太多权重,只有0.02的权重给了当日的值,所以温度变化时,温度上下起伏,当\(\beta\) 较大时,指数加权平均值适应地更缓慢一些。

可以再换一个值试一试,如果\(\beta\)是另一个极端值,比如说0.5,根据右边的公式(\(\frac{1}{(1-\beta)}\)),这是平均了两天的温度。

作图运行后得到黄线。

由于仅平均了两天的温度,平均的数据太少,所以得到的曲线有更多的噪声,有可能出现异常值,但是这个曲线能够更快适应温度变化。

所以指数加权平均数经常被使用,再说一次,它在统计学中被称为指数加权移动平均值,就简称为指数加权平均数。通过调整这个参数(\(\beta\)),或者说后面的算法学习,会发现这是一个很重要的参数,可以取得稍微不同的效果,往往中间有某个值效果最好,\(\beta\)为中间值时得到的红色曲线,比起绿线和黄线更好地平均了温度。

神经网络优化篇:详解指数加权平均数(Exponentially weighted averages)的更多相关文章

  1. PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明

    PHP函数篇详解十进制.二进制.八进制和十六进制转换函数说明 作者: 字体:[增加 减小] 类型:转载   中文字符编码研究系列第一期,PHP函数篇详解十进制.二进制.八进制和十六进制互相转换函数说明 ...

  2. 走向DBA[MSSQL篇] 详解游标

    原文:走向DBA[MSSQL篇] 详解游标 前篇回顾:上一篇虫子介绍了一些不常用的数据过滤方式,本篇详细介绍下游标. 概念 简单点说游标的作用就是存储一个结果集,并根据语法将这个结果集的数据逐条处理. ...

  3. Scala进阶之路-Scala函数篇详解

    Scala进阶之路-Scala函数篇详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.传值调用和传名调用 /* @author :yinzhengjie Blog:http: ...

  4. CentOS 7 下编译安装lnmp之PHP篇详解

    一.安装环境 宿主机=> win7,虚拟机 centos => 系统版本:centos-release-7-5.1804.el7.centos.x86_64 二.PHP下载 官网 http ...

  5. CentOS 7 下编译安装lnmp之MySQL篇详解

    一.安装环境 宿主机=> win7,虚拟机 centos => 系统版本:centos-release-7-5.1804.el7.centos.x86_64 二.MySQL下载 MySQL ...

  6. CentOS 7 下编译安装lnmp之nginx篇详解

    一.安装环境 宿主机=> win7,虚拟机 centos => 系统版本:CentOS Linux release 7.5.1804 (Core),ip地址 192.168.1.168   ...

  7. Canal:同步mysql增量数据工具,一篇详解核心知识点

    老刘是一名即将找工作的研二学生,写博客一方面是总结大数据开发的知识点,一方面是希望能够帮助伙伴让自学从此不求人.由于老刘是自学大数据开发,博客中肯定会存在一些不足,还希望大家能够批评指正,让我们一起进 ...

  8. java提高篇-----详解java的四舍五入与保留位

    转载:http://blog.csdn.net/chenssy/article/details/12719811 四舍五入是我们小学的数学问题,这个问题对于我们程序猿来说就类似于1到10的加减乘除那么 ...

  9. 组件--Fragment(碎片)第二篇详解

    感觉之前看的还是不清楚,重新再研究了一次 Fragment常用的三个类: android.app.Fragment 主要用于定义Fragment android.app.FragmentManager ...

  10. JavaScript基础篇详解

    全部的数据类型: 基本数据类型: undefined Number Boolean null String 复杂数据类型: object ①Undefined: >>>声明但未初始化 ...

随机推荐

  1. Modbus动态链接库供多语言使用 | Go

    Modbus协议控制动态链接库 应用场景 基于各门语言都有各自的modbus协议库,且良莠不齐,而且在具体的框架下可能存在版本依赖问题, 而且对modbus协议存在比较多的细节处理,可以查看modbu ...

  2. 详解RecyclerView的预布局

    概述 RecyclerView 的预布局用于 Item 动画中,也叫做预测动画.其用于当 Item 项进行变化时执行的一次布局过程(如添加或删除 Item 项),使 ItemAnimator 体验更加 ...

  3. Go 语言的前生今世与介绍

    Go 语言的前生今世与介绍 目录 Go 语言的前生今世与介绍 一. Go 语言的发展 1.1 Go 语言是如何诞生的? 1.2 Go语言的早期团队和演进历程 1.3 Go语言正式发布并开源 1.4 G ...

  4. Fortran 的简单入门和使用 OpenMPI

    Fortran 与 C-like 语言的区别简单总结 无大括号,使用关键字画出范围: C++: int main() { } Fortran: program test implicit none e ...

  5. JDK 动态代理原理

    代理模式 客户端不直接访问目标对象,需要通过第三者来实现间接访问对象 代理对象在客户端和目标对象之间起中介作用,能够屏蔽目标对象不想让客户端知道的内容,或增加额外的服务 动态代理 JDK 动态代理:基 ...

  6. POSIX 真的不适合对象存储吗?

    最近,留意到 MinIO 官方博客的一篇题为"在对象存储上实现 POSIX 访问接口是坏主意"的文章,作者以 S3FS-FUSE 为例分享了通过 POSIX 方式访问 MinIO ...

  7. 2D物理引擎 Box2D for javascript Games 第六章 关节和马达

    2D物理引擎 Box2D for javascript Games 第六章 关节和马达 关节和马达 到现在你所见到的所有类型的刚体有着一些共同点:它们都是自由的并且在除碰撞的请款之外,彼此没有依赖. ...

  8. Django admin 注册自己的路由

    通过 admin.py 在 Django 后台注册自己的路由(对应自己的视图) 要在一个 app 里面的 admin.py 添加如下代码 # django2\apps\business\admin.p ...

  9. dicker 常用命令(简洁版)

  10. Python 用户输入和字符串格式化指南

    Python 允许用户输入数据.这意味着我们可以向用户询问输入.在 Python 3.6 中,使用 input() 方法来获取用户输入.在 Python 2.7 中,使用 raw_input() 方法 ...