数据科学与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!)来归一化,这样
计算举例:
按照步骤举个例子,便于理解:
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 引言 把“熵”应用在系统论中的信息管理方法称为熵方法。熵越大,说明系统越混乱,携带的信息越少;熵越小,说明系统越有序,携带的信息越多。在传感…...
Redis/Codis性能瓶颈揭秘:网卡软中断的影响与优化
目录 现象回顾 问题剖析 现场分析 解决方案 总结与反思 1.调整中断亲和性(IRQ Affinity): 2.RPS(Receive Packet Steering)和 RFS(Receive Flow Steering): 近期,…...
微知-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架构(一)
写这篇文章的目的,是记录一下arm架构的32mcu,方便记忆芯片架构原理,方便我展开对,BootLoader的研究。 arm架构,时钟树,先做个记录,有空写。...
论文解析:基于区块链的去中心化服务选择,用于QoS感知的云制造(四区)
目录 论文解析:基于区块链的去中心化服务选择,用于QoS感知的云制造(四区) 基于区块链的去中心化云制造服务选择方法 一、核心内容概述 二、核心创新点及原理与理论 三、实验与理论分析 PBFT(实用拜占庭容错) 论文解析:基于区块链的去中心化服务选择,用于QoS感知的…...
详细解析STM32 GPIO引脚的8种模式
目录 一、输入浮空(Floating Input):GPIO引脚不连接任何上拉或下拉电阻,处于高阻态 1.浮空输入的定义 2.浮空输入的特点 3.浮空输入的应用场景 4.浮空输入的缺点 5.典型配置方式 6.注意事项 二、输入上拉(Inpu…...
【hacker送书第16期】Python数据分析、挖掘与可视化、AI全能助手ChatGPT职场工作效率提升技巧与案例
解锁数据分析与AI应用的双重秘密:全面推广《Python数据分析、挖掘与可视化从入门到精通》与《AI全能助手ChatGPT职场工作效率提升技巧与案例》 前言Python数据分析、挖掘与可视化从入门到精通💕内容简介获取方式 AI全能助手ChatGPT职场工作效率提升技巧与…...
翼鸥教育:从OceanBase V3.1.4 到 V4.2.1,8套核心集群升级实践
引言:自2021年起,翼鸥教育便开始应用OceanBase社区版,两年间,先后部署了总计12套生产集群,其中核心集群占比超过四分之三,所承载的数据量已突破30TB。自2022年10月,OceanBase 社区发布了4.2.x 版…...
WebGIS开发中不同坐标系坐标转换问题
在 JavaScript 中,使用 proj4 库进行坐标系转换是一个非常常见的操作。proj4 是一个支持多种坐标系的 JavaScript 库,提供了从一种坐标系到另一种坐标系的转换功能。 以下是使用 proj4 进行坐标系转换的基本步骤: 1. 安装 proj4 你可以通过…...
【青牛科技】视频监控器应用
1、简介: 我司安防产品广泛应用在视频监控器上,产品具有性能优良,可 靠性高等特点。 2、图示: 实物图如下: 3、具体应用: 标题:视频监控器应用 简介:视频监控器工作原理是光&#x…...
AWTK-WIDGET-WEB-VIEW 实现笔记 (3) - MacOS
MacOS 上实现 AWTK-WIDGET-WEB-VIEW 有点麻烦,主要原因是没有一个简单的办法将一个 WebView 嵌入到一个窗口中。所以,我们只能通过创建一个独立的窗口来实现。 1. 创建窗口 我对 Object-C 不熟悉,也不熟悉 Cocoa 框架,在 ChatGPT…...
PgSQL即时编译JIT | 第1期 | JIT初识
PgSQL即时编译JIT | 第1期 | JIT初识 JIT是Just-In-Time的缩写,也就是说程序在执行的时候生成可以执行的代码,然后执行它。在介绍JIT之前,需要说下两种执行方式:解释执行和编译执行。其中解释执行是通过解释器,将代码逐…...
Go小记:使用Go实现ssh客户端
一、前言 SSH(Secure Shell)是一种用于在不安全网络上安全访问远程计算机的网络协议。它通过加密的方式提供远程登录会话和其他网络服务,保证通信的安全性和数据的完整性。 本文使用golang.org/x/crypto/ssh包来实现SSH客户端 可以通过go …...
Nginx Spring boot指定域名跨域设置
1、Nginx配置跨域: 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实现分布式锁原因: (1)Redis有很高的性能; (2)Redis命令对此支持较好,实现起来比较方便 2、使用命令介绍: (1)SETNX SETNX …...
Database Advantages (数据库系统的优点)
数据库管理系统(DBMS)提供了一种结构化的方式来存储、管理和访问数据,与传统的文件处理系统相比,数据库提供了许多显著的优点。以下是数据库系统的主要优势: 1. Data Integrity (数据完整性) 概念:数据完整…...
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 · 信号处理 · 续
目录 前言: 可重入函数 重谈进程等待和优化 前言: 在前文,我们已经介绍了信号产生,信号保存,信号处理的主题内容,本文作为信号处理的续篇,主要是介绍一些不那么重要的内容,第一个…...
【Linux】虚拟地址空间,页表,物理内存
目录 进程地址空间,页表,物理内存 什么叫作地址空间? 如何理解地址空间的区域划分? 地址空间结构体 为什么要有地址空间? 页表 cr3寄存器 权限标记位 位置标记位 其他 每个存储单元是一个字节,一…...
C++ 并发专题 - 线程安全的单例模式
一:概述: 在C编程中,call_once 是一种机制,用于确保某个函数或代码段在多线程环境下仅被调用一次。这种机制常用于初始化资源、配置全局变量或执行只需执行一次的逻辑。在 C11 标准中,std::call_once 是由标准库提供的…...
Spring Boot汽车世界:资讯与技术的交汇
2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…...
力扣 LeetCode 541. 反转字符串II(Day4:字符串)
解题思路: i可以成段成段的跳,而不是简单的i class Solution {public String reverseStr(String s, int k) {char[] ch s.toCharArray();// 1. 每隔 2k 个字符的前 k 个字符进行反转for (int i 0; i < ch.length; i 2 * k) {// 2. 剩余字符小于 …...
Django5 2024全栈开发指南(一):框架简介、环境搭建与项目结构
目录 一、Python Web框架要点二、Django流程2.1 Django介绍2.1.1 简介2.1.2 特点2.1.3 MVT模式2.1.4 Django新特性2.1.5 Django学习资料 2.2 搭建Django框架开发环境2.2.1 安装Python语言环境2.2.2 安装Django框架 2.3 创建Django项目2.4 Pycharm创建项目2.5 初试Django52.5.1 …...
Uniapp运行环境判断和解决跨端兼容性详解
Uniapp运行环境判断和解决跨端兼容性 开发环境和生产环境 uniapp可通过process.env.NODE_ENV判断当前环境是开发环境还是生产环境,一般用于链接测试服务器或者生产服务器的动态切换。在HX中,点击运行编译出来的代码是开发环境,点击发行编译…...
Linux设置开机自动执行脚本 rc-local
使用/etc/rc.local 1、启动rc-local服务 首先授予执行权限 chmod x /etc/rc.d/rc.local设置开启自启并启动 sudo systemctl enable rc-local sudo systemctl start rc-local查看状态 sudo systemctl status rc-local2、编写要执行的脚本 vim /home/start.sh #!/bin/bash…...
驱动开发小问题 -记录一下
1 D:\Windows Kits\10\Vsix\VS2022\10.0.26100.0\amd64 D:\Windows Kits\10\Vsix\VS2019 2 windows防火墙白板 无法设置通过powershell防火墙禁用 Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False 3 内核调试 vm虚拟机 设置成 NAT模式 ÿ…...
学习笔记018——若依框架数据权限功能的实现
ps:本文所使用的若依是前后端分离的v3.6.0版本。 1、建表 建立业务表的时候,需要在表中添加user_id和dept_id两个字段。(字段一定要一样,下文能体现) user_id:表中该条记录的创建人id dept_id࿱…...
Nginx文件下载服务器搭建
Nginx文件下载服务器搭建 80端口启动下载服务器, 下载/var/www/downloads目录下的文件,nginx.conf如下: server {listen 80;location /downloads/ {root /var/www/downloads;autoindex on; # 显示目录autoindex_localtime on;} }浏览器中访问ÿ…...
AWD脚本编写_1
AWD脚本编写_1 shell.php(放在网站根目录下) <?php error_reporting(0); eval($_GET["yanxiao"]); ?>脚本编写成功 后门文件利用与解析 import requests import base64def get_flag(url, flag_url, method, passwd, flag_path):cmd…...
网站关键词价格/廊坊seo推广公司
2019独角兽企业重金招聘Python工程师标准>>> 1.创建HelloController类 2.编写HelloController类返回Hello World! package com.text.textdemo;import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.Req…...
网页广告多少钱/seo推广代运营
php解码 htmlspecialchars_decode() JS解码 function decodeEntities(encodedString) {var textArea document.createElement(textarea);textArea.innerHTML encodedString;return textArea.value; } decodeEntities(encodedString)...
佛山高端网站建设公司/企业推广宣传文案
jQuery函数获取一个元素 (或选择器中的一组元素) 占用的最远空间的坐标 。 如果您根据需要在容器内的子元素的绝对位置(即,拖放元素)来设置容器的面积,则可能会很有用。 jQuery.fn.getMaxOccupiedLocation …...
南昌建网站做优化公司/seo课程总结
当前,整个汽车半导体的王者之战火已经点燃,包括英伟达、高通、AMD、英特尔等巨头纷纷推出自家的重磅产品和创新技术,一致瞄准自动驾驶芯片领域。 一方面,自动驾驶是百年汽车产业的一次重大变革,也是未来数字化社会发展…...
哪个网站可以做纸箱/网站推广平台排行
## 更新数据~~~Db::name(user)->where(id, 1)->update([name > thinkphp]);~~~实际生成的SQL语句可能是:~~~UPDATE think_user SET namethinkphp WHERE id 1~~~> update 方法返回影响数据的条数,没修改任何数据返回 0支持使用data方法传入要…...
重庆模板建站代理/如何在百度上发布自己的广告
一 钉钉机器人使用场景钉钉机器人是钉钉群的高级扩展功能,可以简单实现将第三方服务信息聚合到钉钉群中,实现信息的自动同步,常用场景如下:聚合Github、Gitlab等源码管理服务,实现源码更新同步;聚合Trello、…...