用python做时间序列预测七:时间序列复杂度量化
本文介绍一种方法,帮助我们了解一个时间序列是否可以预测,或者说了解可预测能力有多强。
Sample Entropy (样本熵)
Sample Entropy是Approximate Entropy(近似熵)的改进,用于评价波形前后部分之间的混乱程度,
熵越大,乱七八糟的波动越多,越不适合预测;熵越小,乱七八糟的波动越小,预测能力越强。

具体思想和实现如下:
- 思想
Sample Entropy最终得到一个 -np.log(A/B) ,该值越小预测难度越小,所以A/B越大,预测难度越小。
A:从0位置开始,取m+1个元素构成一个向量,然后移动一步,再取m+1个元素构成一个向量,如此继续直到最后得到一个向量集合Xa,看有多少向量彼此的距离小于容忍度r(即有多少向量彼此相似,又称自相似个数)。
B:从0位置开始,取m个元素构成一个模板向量,然后移动一步,再取m个元素构成一个模板向量,如此继续直到最后得到一个向量集合Xb,看有多少向量彼此的距离小于容忍度r(即有多少向量彼此相似,又称自相似个数)。
而实际上A总是小于等于B的,所以A/B越接近1,预测难度越小,直觉上理解,应该就是波形前后部分之间的变化不大,那么整个时间序列的波动相对来说会比较纯(这也是熵的含义,熵越小,信息越纯,熵越大,信息越混乱),或者说会具有一定的规律,而如果A和B相差很大,则时间序列波动不纯,或者说几乎没有规律可言。
比如:U = [0.2, 0.6, 0.7, 1.2, 55, 66],m=2,
那么可以计算得到:
Xa = [[0.2, 0.6, 0.7], [0.6, 0.7, 1.2], [0.7, 1.2, 55.0], [1.2, 55.0, 66.0]]
Xb = [[0.2, 0.6], [0.6, 0.7], [0.7, 1.2], [1.2, 55.0], [55.0, 66.0]]
假设Xa中相似向量的个数比Xb多,那么应该出现Xa满足r,但是Xb不满足r的情况,但是拿Xa和Xb的前两个向量来分析,如果Xa满足r,则0.2-0.6 ,0.6-0.7,0.7-1.2中的最大值应该<=r,也就是说0.2-0.6 ,0.6-0.7肯定<=r,如此推断,Xb肯定也满足r, 所以只有可能出现Xb满足r,Xa不满足r的情况。- python实现
def SampEn(U, m, r):
"""
用于量化时间序列的可预测性
:param U: 时间序列
:param m: 模板向量维数
:param r: 距离容忍度,一般取0.1~0.25倍的时间序列标准差,也可以理解为相似度的度量阈值
:return: 返回一个-np.log(A/B),该值越小预测难度越小
"""
def _maxdist(x_i, x_j):
"""
Chebyshev distance
:param x_i:
:param x_j:
:return:
"""
return max([abs(ua - va) for ua, va in zip(x_i, x_j)])
def _phi(m):
x = [[U[j] for j in range(i, i + m - 1 + 1)] for i in range(N - m + 1)]
C = [len([1 for j in range(len(x)) if i != j and _maxdist(x[i], x[j]) <= r]) for i in range(len(x))]
return sum(C)
N = len(U)
return -np.log(_phi(m + 1) / _phi(m))
if __name__ == '__main__':
_U = [0.2, 0.6, 0.7, 1.2, 55, 66]
rand_small = np.random.randint(0, 100, size=120)
rand_big = np.random.randint(0, 100, size=136)
m = 2
print(SampEn(_U, m, r=0.2 * np.std(_U)))
print(SampEn(rand_small, m, r=0.2 * np.std(rand_small)))
print(SampEn(rand_big, m, r=0.2 * np.std(rand_big)))
ok,本篇就这么多内容啦~,感谢阅读O(∩_∩)O。

用python做时间序列预测七:时间序列复杂度量化的更多相关文章
- python做中学(七)ord() 函数
描述 ord() 函数是 chr() 函数(对于8位的ASCII字符串)或 unichr() 函数(对于Unicode对象)的配对函数,它以一个字符(长度为1的字符串)作为参数,返回对应的 ASCII ...
- 用python做时间序列预测一:初识概念
利用时间序列预测方法,我们可以基于历史的情况来预测未来的情况.比如共享单车每日租车数,食堂每日就餐人数等等,都是基于各自历史的情况来预测的. 什么是时间序列? 时间序列,是指同一个变量在连续且固定的时 ...
- 用python做时间序列预测九:ARIMA模型简介
本篇介绍时间序列预测常用的ARIMA模型,通过了解本篇内容,将可以使用ARIMA预测一个时间序列. 什么是ARIMA? ARIMA是'Auto Regressive Integrated Moving ...
- Python中利用LSTM模型进行时间序列预测分析
时间序列模型 时间序列预测分析就是利用过去一段时间内某事件时间的特征来预测未来一段时间内该事件的特征.这是一类相对比较复杂的预测建模问题,和回归分析模型的预测不同,时间序列模型是依赖于事件发生的先后顺 ...
- 基于 Keras 用 LSTM 网络做时间序列预测
目录 基于 Keras 用 LSTM 网络做时间序列预测 问题描述 长短记忆网络 LSTM 网络回归 LSTM 网络回归结合窗口法 基于时间步的 LSTM 网络回归 在批量训练之间保持 LSTM 的记 ...
- Kesci: Keras 实现 LSTM——时间序列预测
博主之前参与的一个科研项目是用 LSTM 结合 Attention 机制依据作物生长期内气象环境因素预测作物产量.本篇博客将介绍如何用 keras 深度学习的框架搭建 LSTM 模型对时间序列做预测. ...
- facebook开源的prophet时间序列预测工具---识别多种周期性、趋势性(线性,logistic)、节假日效应,以及部分异常值
简单使用 代码如下 这是官网的quickstart的内容,csv文件也可以下到,这个入门以后后面调试加入其它参数就很简单了. import pandas as pd import numpy as n ...
- (数据科学学习手札40)tensorflow实现LSTM时间序列预测
一.简介 上一篇中我们较为详细地铺垫了关于RNN及其变种LSTM的一些基本知识,也提到了LSTM在时间序列预测上优越的性能,本篇就将对如何利用tensorflow,在实际时间序列预测任务中搭建模型来完 ...
- 腾讯技术工程 | 基于Prophet的时间序列预测
预测未来永远是一件让人兴奋而又神奇的事.为此,人们研究了许多时间序列预测模型.然而,大部分的时间序列模型都因为预测的问题过于复杂而效果不理想.这是因为时间序列预测不光需要大量的统计知识,更重要的是它需 ...
- 时间序列 预测分析 R语言
在对短期数据的预测分析中,我们经常用到时间序列中的指数平滑做数据预测,然后根据不同. 下面我们来看下具体的过程 x<-data.frame(rq=seq(as.Date('2016-11-15' ...
随机推荐
- Ubuntu实现SSH外网连接内网(反向隧道)
应用场景: 如果你有Linux云主机(腾讯.华为等),且公司有一台只有内网IP (或动态IP) 的Linux工作机:你计划在家里工作时,通过家里的电脑连接公司的工作机 (且不想使用类似Teamview ...
- Prime1_解法一:cms渗透 & 内核漏洞提权
Prime1_解法一:cms渗透 & 内核漏洞提权 目录 Prime1_解法一:cms渗透 & 内核漏洞提权 信息收集 主机发现 nmap扫描 tcp扫描 tcp详细扫描22,80端口 ...
- C# Redis 的基本使用
C# Redis 的基本使用 -迷恋自留地 Redis 概述 在我们日常的开发中,无不都是使用数据库来进行数据的存储,由于一般的系统任务中通常不会存在高并发的情况,所以这样看起来并没有什么问题,可是一 ...
- Dapr-3: 从 20000 英尺之上俯瞰 Dapr
第 3 章 从 20000 英尺之上俯瞰 Dapr Dapr at 20,000 feet | Microsoft Docs 在第 1 章中,我们讨论了分布式微服务应用的吸引力.但是,我们也指出了它会 ...
- 解决用netty去做web服务时,post长度过大的问题
原文地址 http://my.oschina.net/momohuang/blog/114552 先说一下,本来是想自己写socket ,启动一个简单点的web服务用于接收数据的.写完之后,发现会有各 ...
- 混合云网络过于复杂?ENS给你全局一张网的极致体验
本文分享自华为云社区<[华为云Stack][大架光临]第19期:混合云网络过于复杂?ENS给你全局一张网的极致体验>,作者:华为云Stack ENS研发团队. 政企IT的混合形态 经过几十 ...
- PostGIS代码操作简介
PostGIS代码操作简介 1. 代码操作POSTGIS的可选方案 jdbc postgis-java geotools gdal 2. JDBC public void testJdbc() { S ...
- Mysql身份认证过程
背景 最近有一些hersql的用户希望能支持mysql的caching_sha2_password认证方式,caching_sha2_password与常用的mysql_native_password ...
- UWP Shadow 阴影
参考文字: https://mtaulty.com/2016/08/10/windows-10-uwp-and-composition-light-and-shade/ <Grid Backgr ...
- superset 1.3 hello world 开发实录
参考网址: https://superset.apache.org/docs/installation/building-custom-viz-plugins 实际操作: 因为内容是从hub上下载的: ...