数据科学与SQL:如何计算排列熵?| 基于SQL实现

目录

0 引言

1 排列熵的计算原理

 2 数据准备

3 问题分析

4 小结


0 引言

把“熵”应用在系统论中的信息管理方法称为熵方法。熵越大,说明系统越混乱,携带的信息越少;熵越小,说明系统越有序,携带的信息越多。在传感器信息处理中,可以利用熵方法描述传感器信号的特征,进而对传感器信号进行有效分析。

排列熵(Permutation Entropy, PE)作为一种衡量一维时间序列复杂度的平均熵参数,它不仅能够度量一个非线性信号的不确定性,而且具有计算简单、抗噪声能力强等优点。因此,可以选择排列熵对IMF中包含的故障特征进行提取。通过集合经验模态分解后得到的每个IMF分量包含传感器信号在不同时间尺度下的特征。通过计算各个IMF分量的排列熵值并把它们组成特征向量,能够有效地突出在多尺度下的传感器故障特征。

1 排列熵的计算原理

对于某个长度为n的排列x,其元素分别为x1,x2,...,xn

①采用相空间重构延迟坐标法对一维时间序列x中任意一个元素x(i)进行相空间重构,得到如下矩阵:

其中,j=1, 2,…,K, K为重构分量的数目,m为嵌入维数,τ为延迟时间,x(j)为重构矩阵的第j行分量。 

②对x(i)的重构向量的各元素进行升序排列,得到j1, j2,…,jm。m维相空间映射下最多可以得到m!个不同的排列模式,P(l)表示其中一种排列的模式

 其中,l=1, 2,…,k,且k≤m!。

③对x序列各种排列情况下出现次数进行统计,计算各种排列情况出现的相对频率

 其概率为p1, p2,…,pk。

④信号排列模式的熵为:

⑤计算序列归一化后的排列熵为:
当P j = 1 / m ! ,也就是每种符号都有且它们的概率都相等,此时时间序列的复杂程度最高,所以排列熵最大,为 ln(m!)。另外,为了方便表示,通常会将H(m)除以一个 ln(m!)来归一化,这样


0=<H(m) / log_{_2{m!}}<=1

计算举例:

按照步骤举个例子,便于理解:

x={2,4,5,6,3,7,1},其长度n=7

1. 设嵌入维度m=3(3-neightborhood),时间延迟t=1(没有skip)

2. 得到k=n-(m-1)t=5个子序列,即:

(1) 2,4,5

(2) 4,5,6

(3) 5,6,3

(4) 6,3,7

(5) 3,7,1

3. 转换为大小关系的排列,分别为:

针对每个子序列K,对其值从小到大排序(如果值相同按照索引排序),返回对应的索引值。

注意此处有两种理解方式:

(1)该数排在第几个位置

例如【5,6,3】,该数排名后的位置为【2,3,1】

解释:5这个数排在第2个位置,6这个数排在第3个位置,3这个数排在第一个位置,所以返回【2,3,1】

(2)排在该位置【1,2,3】的是第几个数

例如【5,6,3】,其排序后的索引为【3,1,2】

解释:排在第一个位置的元素索引是3,排在第2个位置的元素索引是1,排在第三个位置的元素索引是2,所以返回【3,1,2】

这两种情况都不影响最终的结果.本文采取第一种类型计算结果如下:

(1) 1,2,3

(2) 1,2,3

(3) 2,3,1

(4) 2,1,3

(5) 2,3,1

4. 以上排列共有3种,分别为2次(1,2,3),2次(3,1,2)和1次(2,1,3),这些排列的概率分别为:

(1) P(1,2,3) = 2/5

(2) P(2,3,1) = 2/5

(3) P(2,1,3) = 1/5

5. 计算信息熵,得到H(3)= 0.4*log2(2.5)+0.4*log2(2.5)+0.2*log2(5)=1.5219

 2 数据准备

create table permutation_entropy as(select stack(7,1, '2',2, '4',3, '5',4, '6',5, '3',6, '7',7, '1') as (id, data));

3 问题分析

 第一步:计算m=3,t=1时分割的数据块

select id,data,data_block
from (select id,data,collect_list(data) over (order by id rows between current row and 2 following) data_blockfrom permutation_entropy) t
where size(data_block) >= 3

第二步:计算 块中从小到大排序后的索引

select id,data_block,pos + 1  pos,tmp.data data,row_number() over (partition by data_block order by tmp.data) rn
from (select id,data,data_blockfrom (select id,data,collect_list(data) over (order by id rows between current row and 2 following) data_blockfrom permutation_entropy) twhere size(data_block) >= 3) data_blocklateral view posexplode(data_block) tmp as pos, data

 

其中POS字段即为返回的索引值。

返回索引数组SQL如下:

select id,data_block,collect_list(pos) pos_arrfrom (select id,data_block,pos + 1                                                       pos,tmp.data                                                      data,row_number() over (partition by data_block order by tmp.data) rnfrom (select id,data,data_blockfrom (select id,data,collect_list(data)over (order by id rows between current row and 2 following) data_blockfrom permutation_entropy) twhere size(data_block) >= 3) data_blocklateral view posexplode(data_block) tmp as pos, data) tgroup by id, data_block

 

 第三步:计算分块排列后的概率

with pos as (select id,data_block,collect_list(pos) pos_arrfrom (select id,data_block,pos + 1                                                       pos,tmp.data                                                      data,row_number() over (partition by data_block order by tmp.data) rnfrom (select id,data,data_blockfrom (select id,data,collect_list(data)over (order by id rows between current row and 2 following) data_blockfrom permutation_entropy) twhere size(data_block) >= 3) data_blocklateral view posexplode(data_block) tmp as pos, data) tgroup by id, data_block)
select pos_arr, count(1) data_block_cnt, max(ttl_cnt) ttl_cnt, cast(count(1) / nullif(max(ttl_cnt),0) as decimal(18,4))  p
from(select id,data_block,pos_arr,count(1) over () ttl_cntfrom pos) t
group by  pos_arr

第四步:按照熵的公式计算最终结果

with pos as (select id,data_block,collect_list(pos) pos_arrfrom (select id,data_block,pos + 1                                                       pos,tmp.data                                                      data,row_number() over (partition by data_block order by tmp.data) rnfrom (select id,data,data_blockfrom (select id,data,collect_list(data)over (order by id rows between current row and 2 following) data_blockfrom permutation_entropy) twhere size(data_block) >= 3) data_blocklateral view posexplode(data_block) tmp as pos, data) tgroup by id, data_block)
selectcast(-sum(p*log2(p)) as decimal(18, 4)) permutation_entropy
from(select pos_arr, count(1)                                                   data_block_cnt, max(ttl_cnt)                                               ttl_cnt, cast(count(1) / nullif(max(ttl_cnt), 0) as decimal(18, 4)) pfrom (select id,data_block,pos_arr,count(1) over () ttl_cntfrom pos) tgroup by pos_arr) t

第六步:计算归一化结果.

为了将熵值的范围调整到 0 到 1 的范围内,进行数据归一化

with pos as (select id,data_block,collect_list(pos) pos_arrfrom (select id,data_block,pos + 1                                                       pos,tmp.data                                                      data,row_number() over (partition by data_block order by tmp.data) rnfrom (select id,data,data_blockfrom (select id,data,collect_list(data)over (order by id rows between current row and 2 following) data_blockfrom permutation_entropy) twhere size(data_block) >= 3) data_blocklateral view posexplode(data_block) tmp as pos, data) tgroup by id, data_block)
select permutation_entropy, cast( permutation_entropy / log2(3*2*1) as  decimal(18, 4)) normal_permutation_entropy
from(select cast(-sum(p * log2(p)) as decimal(18, 4)) permutation_entropyfrom (select pos_arr, count(1)                                                   data_block_cnt, max(ttl_cnt)                                               ttl_cnt, cast(count(1) / nullif(max(ttl_cnt), 0) as decimal(18, 4)) pfrom (select id,data_block,pos_arr,count(1) over () ttl_cntfrom pos) tgroup by pos_arr) t) t

 

4 小结

本文利用SQL语言实现了时间序列分析时常用的特征排列熵。排列熵只能反映当前一维时间序列的复杂度。考虑到外界温度、天气等因素的影响,信号也可能会突变,产生噪声,因此需要排除噪声的干扰。排列熵作为衡量时间序列复杂程度的指标,越规则的时间序列,它对应的排列熵越小;越复杂的时间序列,它对应的排列熵越大。但是这样的结果是建立在合适的 m 的选择的基础上的,如果 m 的选取很小,如1或者2的话,那么它的排列空间就会很小(1!、2!)。由排列熵的计算过程看出,排列熵的值与嵌入维数m、延迟时间t及数据长度N有关。文献研究表明,嵌入维数m为4~8时,对传感器不同状态下的信号区分度良好。实际上,当嵌入维数m<4时,排列熵无法准确地检测出传感器信号中的动态变化,而当m>8时,不仅会使排列熵的计算量增大,而且会使排列熵的变化范围变窄而难于准确地衡量信号复杂度。延迟时间t的取值对排列熵的影响不大。但是,当t>5时,排列熵不能准确地检测传感器信号中的微小变化。数据长度N也是影响排列熵计算结果的重要参数,N值过大时会把信号平滑,不能准确地衡量信号的动态变化。N值也不能太小,否则,计算结果将失去统计意义。 

参考文献:

刘永斌.基于非线性信号分析的滚动轴承状态监测诊断研究[D].合肥:中国科学技术大学,2011. 

Christoph B, Bernd P.Permutation entropy: a natural complexity measure for time series [J].Physical Review Letters, 2002, 88(17):174102. 

如果您觉得本文还不错,对你有帮助,那么不妨可以关注一下我的数字化建设实践之路专栏,这里的内容会更精彩。

专栏 原价99,现在活动价59.9,按照阶梯式增长,还差5个人上升到69.9,最终恢复到原价

专栏优势:
(1)一次收费持续更新。

(2)实战中总结的SQL技巧,帮助SQLBOY 在SQL语言上有质的飞越,无论你应对业务难题及面试都会游刃有余【全网唯一讲SQL实战技巧,方法独特】

SQL很简单,可你却写不好?每天一点点,收获不止一点点-CSDN博客

(3)实战中数仓建模技巧总结,让你认识不一样的数仓。【数据建模+业务建模,不一样的认知体系】(如果只懂数据建模而不懂业务建模,数仓体系认知是不全面的)

(4)数字化建设当中遇到难题解决思路及问题思考。

我的专栏具体链接如下:

 数字化建设通关指南_莫叫石榴姐的博客-CSDN博客 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/473872.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

28.<Spring博客系统⑤(部署的整个过程(CentOS))>

引入依赖 Spring-boot-maven-plugin 用maven进行打包的时候必须用到这个插件。看看自己pom.xml中有没有这个插件 并且看看配置正确不正常。 注&#xff1a;我们这个项目打的jar包在30MB左右。 <plugin><groupId>org.springframework.boot</groupId><artif…

无人机在森林中的应用!

一、森林资源调查 无人机可以利用遥感技术快速获取所需区域高精度的空间遥感信息&#xff0c;对森林图斑进行精确区划。相较于传统手段&#xff0c;无人机调查具有低成本、高效率、高时效的特点&#xff0c;尤其在地理环境条件不好的区域&#xff0c;调查人员无法或难以到达的…

esp32c3开发板通过micropython的mqtt库连MQTT物联网消息服务器

MQTT介绍 MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一种轻量级的消息协议&#xff0c;旨在设备之间进行通信&#xff0c;尤其是在网络条件较差的情况下。MQTT v3.1.1 和 MQTT v5 是该协议的两个主要版本。 MQTT v3.1.1&#xff1a; 优点&#xff…

什么是SMARC?模块电脑(核心板)规范标准简介三

1. 概念 SMARC&#xff08;Smart Mobility ARChitecture&#xff0c;智能移动架构&#xff09;是一种通用的小型计算机模块定义&#xff0c;基于ARM和X86技术的模块化计算机低功耗嵌入式架构平台&#xff0c;旨在满足低功耗、低成本和高性能的应用需求。这些模块通常使用与平板…

resnet50,clip,Faiss+Flask简易图文搜索服务

一、实现 文件夹目录结构&#xff1a; templates -----upload.html faiss_app.py 前端代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widt…

JavaWeb——JS、Vue

目录 1.JavaScript a.概述 b.引入方式 c.JS的基础语法 d.JS函数 e.JS对象 f.JS事件监听 2.Vue a.概述 b.Vue常用指令 d.生命周期 1.JavaScript a.概述 JavaScript是一门跨平台、面向对象的脚本语言。是用来控制网页行为的&#xff0c;它能使网页可交互。JavaScript和…

MySQL的编程语言

一、MySQL基础 使用系统的全局变量@@VERSION查看当前使用的MySQL的版本信息,SQL语句如下: select @@version; 将局部变量varl声明为char的类型,长度值为10,并为其赋值为“程菲” begin declare var1 char(10); set @var1="程菲"; end 通过局部变量查看d_eams数…

小程序-基于java+SpringBoot+Vue的驾校预约平台设计与实现

项目运行 1.运行环境&#xff1a;最好是java jdk 1.8&#xff0c;我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境&#xff1a;IDEA&#xff0c;Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境&#xff1a;Tomcat 7.x,8.x,9.x版本均可 4.硬件环境&#xff1a…

阿里云引领智算集群网络架构的新一轮变革

阿里云引领智算集群网络架构的新一轮变革 云布道师 11 月 8 日~ 10 日在江苏张家港召开的 CCF ChinaNet&#xff08;即中国网络大会&#xff09;上&#xff0c;众多院士、教授和业界技术领袖齐聚一堂&#xff0c;畅谈网络未来的发展方向&#xff0c;聚焦智算集群网络的创新变…

【ASR技术】WhisperX安装使用

介绍 WhisperX 是一个开源的自动语音识别&#xff08;ASR&#xff09;项目&#xff0c;由 m-bain 开发。该项目基于 OpenAI 的 Whisper 模型&#xff0c;通过引入批量推理、强制音素对齐和语音活动检测等技术。提供快速自动语音识别&#xff08;large-v2 为 70 倍实时&#xf…

android framework ams/wms常见系统日志(main\system\events\crash,protoLog使用)

重要性 wms和ams的一些系统原生日志能够帮助我们快速定位问题 日志分类 在日常framework工作中常见的日志类别如下&#xff1a; -b , --buffer Request alternate ring buffer, ‘main’, ‘system’, ‘radio’, ‘events’, ‘crash’, ‘default’ or ‘all’. Additiona…

2024年11月16日 星期六 重新整理Go技术

今日格言 坚持每天进步一点点~ 一个人也可以是一个团队~ 学习全栈开发, 做自己喜欢的产品~~ 简介 大家好, 我是张大鹏, 今天是2024年11月16日星期六, 很高兴在这里给大家分享技术. 今天又是休息的一天, 做了很多的思考, 整理了自己掌握的技术, 比如Java, Python, Golang,…

深度解读混合专家模型(MoE):算法、演变与原理

假设一个专家团队共同解决复杂问题。每位专家都拥有独特的技能&#xff0c;团队通过高效分配任务实现了前所未有的成功。这就是混合专家&#xff08;Mixture-of-Experts&#xff0c;MoE&#xff09;模型架构背后的基本思想&#xff0c;这种方法允许机器学习系统&#xff0c;特别…

Area-Composition模型部署指南

一、介绍 本模型可以通过输入不同的提示词&#xff0c;然后根据各部分提示词进行融合生成图片。如下图&#xff1a; 此图像包含 4 个不同的区域&#xff1a;夜晚、傍晚、白天、早晨 二、部署 环境要求&#xff1a; 最低显存&#xff1a;10G 1. 部署ComfyUI 本篇的模型部署…

HTML之列表学习记录

练习题&#xff1a; 图所示为一个问卷调查网页&#xff0c;请制作出来。要求&#xff1a;大标题用h1标签&#xff1b;小题目用h3标签&#xff1b;前两个问题使用有序列表&#xff1b;最后一个问题使用无序列表。 代码&#xff1a; <!DOCTYPE html> <html> <he…

Java基础-内部类与异常处理

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 一、Java 内部类 什么是内部类&#xff1f; 使用内部类的优点 访问局部变量的限制 内部类和继承 内部…

C/C++中使用MYSQL

首先要保证下载好mysql的库和头文件&#xff0c;头文件在/usr/include/mysql/目录下&#xff0c;库在/usr/lib64/mysql/目录下&#xff1a; 一般情况下&#xff0c;在我们安装mysql的时候&#xff0c;这些都提前配置好了&#xff0c;如果没有就重装一下mysql。如果重装mysql还是…

华为ensp实验二--mux vlan的应用

一、实验内容 1.实验要求&#xff1a; 在交换机上创建三个vlan&#xff0c;vlan10、vlan20、vlan100&#xff0c;将vlan100设置为mux-vlan&#xff0c;将vlan10设置为group vlan&#xff0c;将vlan20设置为separate vlan&#xff1b;实现vlan10的设备在局域网内可以进行互通&…

Redis知识分享(三)

目录 前言 七、事务管理 7.1事务中的异常处理 八、订阅发布 8.1概述 ​8.2.Redis针对发布订阅相关指令 九、主从复制 9.1主从复制概述 9.2.主从复制的用处 9.3主从复制实现原理 ​9.3.1.psync指令 9.3.2.复制偏移量 9.3.3复制积压缓冲区&节点ID 前言 今天…

Java基础-组件及事件处理(中)

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 BorderLayout布局管理器 说明&#xff1a; 示例&#xff1a; FlowLayout布局管理器 说明&#xff1a; …