当前位置: 首页 > news >正文

数据科学与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博客 

相关文章:

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

目录 0 引言 1 排列熵的计算原理 2 数据准备 3 问题分析 4 小结 0 引言 把“熵”应用在系统论中的信息管理方法称为熵方法。熵越大&#xff0c;说明系统越混乱&#xff0c;携带的信息越少&#xff1b;熵越小&#xff0c;说明系统越有序&#xff0c;携带的信息越多。在传感…...

Redis/Codis性能瓶颈揭秘:网卡软中断的影响与优化

目录 现象回顾 问题剖析 现场分析 解决方案 总结与反思 1.调整中断亲和性&#xff08;IRQ Affinity&#xff09;&#xff1a; 2.RPS&#xff08;Receive Packet Steering&#xff09;和 RFS&#xff08;Receive Flow Steering&#xff09;&#xff1a; 近期&#xff0c;…...

微知-DOCA ARGP参数模块的相关接口和用法(config单元、params单元,argp pipe line,回调)

文章目录 1. 背景2. 设置参数的主要流程2.1 初始化2.2 注册某个params的处理方式以及回调函数2.4 定义好前面的params以及init指定config地点后start处理argv 3. 其他4. DOCA ARGP包相关4.1 主要接口4.2 DOCA ARGP的2个rpm包4.2.1 doca-sdk-argp-2.9.0072-1.el8.x86_64.rpm4.2.…...

PostgreSQL高可用Patroni安装(超详细)

目录 一 安装Patroni 0 Patroni 对Python的版本要求 1 卸载原来的Python 3.6 版本 2 安装Python 3.7 之上版本 3 安装依赖 psycopg3 4 安装patroni 5 卸载 patroni 二 安装ETCD 1 使用 yum 安装 etcd 2 etcd 配置文件 3 管理 etcd 4 设置密码 5 常用命令 三 安装…...

mcu之,armv7架构,contex-M4系列,时钟树,中断,IO架构(一)

写这篇文章的目的&#xff0c;是记录一下arm架构的32mcu&#xff0c;方便记忆芯片架构原理&#xff0c;方便我展开对&#xff0c;BootLoader的研究。 arm架构&#xff0c;时钟树&#xff0c;先做个记录&#xff0c;有空写。...

论文解析:基于区块链的去中心化服务选择,用于QoS感知的云制造(四区)

目录 论文解析:基于区块链的去中心化服务选择,用于QoS感知的云制造(四区) 基于区块链的去中心化云制造服务选择方法 一、核心内容概述 二、核心创新点及原理与理论 三、实验与理论分析 PBFT(实用拜占庭容错) 论文解析:基于区块链的去中心化服务选择,用于QoS感知的…...

详细解析STM32 GPIO引脚的8种模式

目录 一、输入浮空&#xff08;Floating Input&#xff09;&#xff1a;GPIO引脚不连接任何上拉或下拉电阻&#xff0c;处于高阻态 1.浮空输入的定义 2.浮空输入的特点 3.浮空输入的应用场景 4.浮空输入的缺点 5.典型配置方式 6.注意事项 二、输入上拉&#xff08;Inpu…...

【hacker送书第16期】Python数据分析、挖掘与可视化、AI全能助手ChatGPT职场工作效率提升技巧与案例

解锁数据分析与AI应用的双重秘密&#xff1a;全面推广《Python数据分析、挖掘与可视化从入门到精通》与《AI全能助手ChatGPT职场工作效率提升技巧与案例》 前言Python数据分析、挖掘与可视化从入门到精通&#x1f495;内容简介获取方式 AI全能助手ChatGPT职场工作效率提升技巧与…...

翼鸥教育:从OceanBase V3.1.4 到 V4.2.1,8套核心集群升级实践

引言&#xff1a;自2021年起&#xff0c;翼鸥教育便开始应用OceanBase社区版&#xff0c;两年间&#xff0c;先后部署了总计12套生产集群&#xff0c;其中核心集群占比超过四分之三&#xff0c;所承载的数据量已突破30TB。自2022年10月&#xff0c;OceanBase 社区发布了4.2.x 版…...

WebGIS开发中不同坐标系坐标转换问题

在 JavaScript 中&#xff0c;使用 proj4 库进行坐标系转换是一个非常常见的操作。proj4 是一个支持多种坐标系的 JavaScript 库&#xff0c;提供了从一种坐标系到另一种坐标系的转换功能。 以下是使用 proj4 进行坐标系转换的基本步骤&#xff1a; 1. 安装 proj4 你可以通过…...

【青牛科技】视频监控器应用

1、简介&#xff1a; 我司安防产品广泛应用在视频监控器上&#xff0c;产品具有性能优良&#xff0c;可 靠性高等特点。 2、图示&#xff1a; 实物图如下&#xff1a; 3、具体应用&#xff1a; 标题&#xff1a;视频监控器应用 简介&#xff1a;视频监控器工作原理是光&#x…...

AWTK-WIDGET-WEB-VIEW 实现笔记 (3) - MacOS

MacOS 上实现 AWTK-WIDGET-WEB-VIEW 有点麻烦&#xff0c;主要原因是没有一个简单的办法将一个 WebView 嵌入到一个窗口中。所以&#xff0c;我们只能通过创建一个独立的窗口来实现。 1. 创建窗口 我对 Object-C 不熟悉&#xff0c;也不熟悉 Cocoa 框架&#xff0c;在 ChatGPT…...

PgSQL即时编译JIT | 第1期 | JIT初识

PgSQL即时编译JIT | 第1期 | JIT初识 JIT是Just-In-Time的缩写&#xff0c;也就是说程序在执行的时候生成可以执行的代码&#xff0c;然后执行它。在介绍JIT之前&#xff0c;需要说下两种执行方式&#xff1a;解释执行和编译执行。其中解释执行是通过解释器&#xff0c;将代码逐…...

Go小记:使用Go实现ssh客户端

一、前言 SSH&#xff08;Secure Shell&#xff09;是一种用于在不安全网络上安全访问远程计算机的网络协议。它通过加密的方式提供远程登录会话和其他网络服务&#xff0c;保证通信的安全性和数据的完整性。 本文使用golang.org/x/crypto/ssh包来实现SSH客户端 可以通过go …...

Nginx Spring boot指定域名跨域设置

1、Nginx配置跨域&#xff1a; server {listen 80;server_name your-backend-service.com;location / {proxy_pass http://localhost:8080; # Spring Boot应用的内部地址proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-F…...

深入理解Redis(七)----Redis实现分布式锁

基于Redis的实现方式 1、选用Redis实现分布式锁原因&#xff1a; &#xff08;1&#xff09;Redis有很高的性能&#xff1b; &#xff08;2&#xff09;Redis命令对此支持较好&#xff0c;实现起来比较方便 2、使用命令介绍&#xff1a; &#xff08;1&#xff09;SETNX SETNX …...

Database Advantages (数据库系统的优点)

数据库管理系统&#xff08;DBMS&#xff09;提供了一种结构化的方式来存储、管理和访问数据&#xff0c;与传统的文件处理系统相比&#xff0c;数据库提供了许多显著的优点。以下是数据库系统的主要优势&#xff1a; 1. Data Integrity (数据完整性) 概念&#xff1a;数据完整…...

Qt桌面应用开发 第五天(常用控件)

目录 1.QPushButton和ToolButton 1.1QPushButton 1.2ToolButton 2.RadioButton和CheckBox 2.1RadioButton单选按钮 2.2CheckBox多选按钮 3.ListWidget 4.TreeWidget控件 5.TableWidget控件 6.Containers控件 6.1QScrollArea 6.2QToolBox 6.3QTabWidget 6.4QStacke…...

初识Linux · 信号处理 · 续

目录 前言&#xff1a; 可重入函数 重谈进程等待和优化 前言&#xff1a; 在前文&#xff0c;我们已经介绍了信号产生&#xff0c;信号保存&#xff0c;信号处理的主题内容&#xff0c;本文作为信号处理的续篇&#xff0c;主要是介绍一些不那么重要的内容&#xff0c;第一个…...

【Linux】虚拟地址空间,页表,物理内存

目录 进程地址空间&#xff0c;页表&#xff0c;物理内存 什么叫作地址空间&#xff1f; 如何理解地址空间的区域划分&#xff1f; 地址空间结构体 为什么要有地址空间&#xff1f; 页表 cr3寄存器 权限标记位 位置标记位 其他 每个存储单元是一个字节&#xff0c;一…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !

我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...

C++ 类基础:封装、继承、多态与多线程模板实现

前言 C 是一门强大的面向对象编程语言&#xff0c;而类&#xff08;Class&#xff09;作为其核心特性之一&#xff0c;是理解和使用 C 的关键。本文将深入探讨 C 类的基本特性&#xff0c;包括封装、继承和多态&#xff0c;同时讨论类中的权限控制&#xff0c;并展示如何使用类…...

k8s从入门到放弃之Pod的容器探针检测

k8s从入门到放弃之Pod的容器探针检测 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;容器探测是指kubelet对容器执行定期诊断的过程&#xff0c;以确保容器中的应用程序处于预期的状态。这些探测是保障应用健康和高可用性的重要机制。Kubernetes提供了两种种类型…...