python历史 用量 预测_用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做时间序列预测七:时间序列复杂度量化相关推荐
- python 时间序列预测_使用Python进行动手时间序列预测
python 时间序列预测 Time series analysis is the endeavor of extracting meaningful summary and statistical ...
- python大数据免费_用python做大数据
不学Python迟早会被淘汰?Python真有这么好的前景? 最近几年Python编程语言在国内引起不小的轰动,有超越Java之势,本来在美国这个编程语言就是最火的,应用的非常非常的广泛,而Pytho ...
- python数据预测_利用Python编写一个数据预测工具
利用Python编写一个数据预测工具 发布时间:2020-11-07 17:12:20 来源:亿速云 阅读:96 这篇文章运用简单易懂的例子给大家介绍利用Python编写一个数据预测工具,内容非常详细 ...
- python 还原九宫格图片_用Python做一个好玩的朋友圈九宫格抽奖
最近在朋友圈看到个好玩的抽奖九宫格: 随便点开一个: 设计思路 以朋友圈中看到的1号图做参考,我们需要准备 300*900 的白色底图,搞笑表情图,广告语,中间一个醒目的数字编号,外加下方的嘲讽&qu ...
- 编程游戏python我的世界_乐学Python编程-做个游戏很简单
1.进入Python 编程世界/ 2 1.1 启动Python 编程环境/ 5 1.2 Python 之禅/ 9 1.3 送你几朵玫瑰花--运行Python 程序/ 16 1.4 Python 的由来 ...
- 用python自动办公 百度_用Python自动办公,做职场高手,16章完整版百度云盘
01.文件 [12.20更新课程代码]用Python自动办公做职场高手.rar [课程代码]从零写Python练手项目:实用脚本.zip [课程代码]四周实现爬虫网站.zip [课程代码]用NumPy ...
- python读取游戏数据_用Python抓取并分析了1982场英雄联盟数据,教你开局前预测游戏对局胜负!...
英雄联盟想必大多数读者不会陌生,这是一款来自拳头,由腾讯代理的大型网络游戏,现在一进网吧,你就能发现一大片玩英雄联盟的人.在2017年中国战队无缘鸟巢的世界总决赛后,一大片人选择了弃游,只是终究没躲过 ...
- python蜡烛图预测_【Python量化投资】系列之SVR预测第二天开盘趋势和股价的正负统计分析(附代码)...
原标题:[Python量化投资]系列之SVR预测第二天开盘趋势和股价的正负统计分析(附代码) 本期导读 ⊙ML.SVM介绍 ⊙股价的正负统计分析 ⊙预测第二天开盘趋势 机器学习方法是计算机科学的一个分 ...
- python照片转卡通_用Python做一个网站,照片生成漫画头像,有这个网站就够了。...
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于腾讯云 作者:Python进阶者 ( 想要学习Python?Pyth ...
最新文章
- Android提示版本号更新操作流程
- wex5 教程 之 图文讲解 智能数据库设计 之(1) 触发器
- android lame wav 转 mp3,Android JNI Lame编解码实现wav到MP3的转换
- Java Date Nuances的痛苦提醒
- JavaFX 2中的PopupMenu
- mac下载百度网盘文件限速_百度网盘限速怎么办 (20200412 )
- python程序设计实验报告实验程序流程序列化_Python程序设计_教学大纲_段震.doc
- mysql获取当月数据_Python + MySQL如何获取股票数据(历史数据)
- SQL:显示每天的小计,某一天没有记录也要显示
- 如何有效阅读英文数据手册?
- 设置网页title旁边的小图标详解
- 海南师范大学本科毕业论文答辩PPT模板
- R|广义线性模型知识点归纳
- c语言入门自学ppt,c语言基础知识ppt
- Python+Selenium自动化测试之页码,前一页、后一页、翻页
- HTTPS/HTTP网络代理
- 液压管路渗漏图像识别检测方法研究
- python爬虫--小白爬取csdn页面题目与链接
- postman接口工具-Invalid URI http:///%7B%7Burl%7D%7Dapi/document/getHelpDocumentUrl?appType=1
- Python之程序交互