文章传感数据分析——Entropy Weight Method (熵权法)中叙述了熵权法的基本步骤。
之前几期文章已经叙述了信息熵权法、TOPSIS熵权法、近似熵权法、样本熵权法、模糊熵权法。
本节将叙述排列熵权法对多传感数据进行处理,并基于Python实现。
本文正文内容
熵权法的5个步骤可以参考我的另一篇文章传感数据分析——Entropy Weight Method (熵权法)。
排列熵
P
e
E
n
PeEn
PeEn是一种检测时间序列随机性和动态变异行为的熵值。
P
e
E
n
PeEn
PeEn的特点就
是就是更具信号特征的改变实现动态的检测,可实现突变信号在线监测。
P
e
E
n
PeEn
PeEn
在计算重构子序列之间的复杂度时引入了排列的思想,具体公式如下:
Y
i
=
[
x
(
i
)
,
x
(
i
+
τ
)
,
?
?
,
x
(
i
+
(
m
?
1
)
τ
)
]
,
i
=
1
,
2
,
?
?
,
N
?
m
+
1
\begin{equation}Y_i=[x(i),x(i+\tau),\cdots,x(i+(m-1)\tau)],i=1,2,\cdots,N-m+1\end{equation}
Yi?=[x(i),x(i+τ),?,x(i+(m?1)τ)],i=1,2,?,N?m+1??
x
(
i
+
(
j
1
?
1
)
τ
)
≤
x
(
i
+
(
j
2
?
1
)
τ
)
≤
?
≤
x
(
i
+
(
j
m
?
1
)
τ
)
\begin{equation}x(i+(j_1-1)\tau)\leq x(i+(j_2-1)\tau)\leq\cdots\leq x(i+(j_m-1)\tau)\end{equation}
x(i+(j1??1)τ)≤x(i+(j2??1)τ)≤?≤x(i+(jm??1)τ)??
S
(
l
)
=
(
j
1
,
j
2
,
?
?
,
j
m
)
,
l
=
1
,
2
,
?
?
,
k
,
a
n
d
?
k
≤
m
!
\begin{equation}S(l)=(j_1,j_2,\cdots,j_m),l=1,2,\cdots,k,and~k\leq m!\end{equation}
S(l)=(j1?,j2?,?,jm?),l=1,2,?,k,and?k≤m!??
P
i
=
N
u
m
b
e
r
(
Y
i
)
N
?
(
m
?
1
)
τ
\begin{equation}P_i=\frac{Number(Y_i)}{N-(m-1)\tau}\end{equation}
Pi?=N?(m?1)τNumber(Yi?)???
P
E
(
m
)
=
?
∑
i
=
1
k
(
P
i
ln
?
P
i
)
\begin{equation}PE(m)=-\sum_{i=1}^k(P_i\ln P_i)\end{equation}
PE(m)=?i=1∑k?(Pi?lnPi?)??
0
≤
f
PeEn
=
P
E
/
ln
?
(
m
!
)
≤
1
\begin{equation}0\leq f_{\textit{PeEn}} = P E / \ln ( m ! ) \leq 1\end{equation}
0≤fPeEn?=PE/ln(m!)≤1??
式(1)~(6)中,
m
m
m 表示嵌入维度,
τ
\tau
τ表示时间延迟因子,
S
(
l
)
S(l)
S(l)是一组符
号序列,由每个元素位置列的索引组成,在每个重构分量按升序重新排列之后。
l
l
l是向量中第
m
m
m个元素的位置的列索引。
P
i
P_i
Pi?是每一类出现的概率。
P
E
PE
PE表示序列的
排列熵值,
f
P
e
E
n
f_{PeEn}
fPeEn?表示排列熵的归一化值。
矩阵
Y
Y
Y共有
k
k
k 个重构分量,每个重构分量都有
m
m
m 维嵌入元素。将矩阵中的第
j
j
j 个类别按升序排列。
j
m
j_m
jm?表示重构分量中每个元素的下标索引值。注意,序列
P
P
P的时间延迟因子
τ
\tau
τ ,它必须是一个正整数。这个参数可以理解为序列的采样间隔。例如,当
τ
=
3
\tau=3
τ=3时,每 3 个数据点采样一次;当
τ
=
1
\tau=1
τ=1时,序列
P
P
P与
A
p
E
n
ApEn
ApEn 和
S
a
m
p
E
n
SampEn
SampEn 的序列定义相同。
==========================================
相关细节叙述可以见大佬的博客:【熵与特征提取】从近似熵,到样本熵,到模糊熵,再到排列熵,究竟实现了什么?(第四篇)——“排列熵”及其MATLAB实现。
系统: Windows 10 / Ubuntu 20.04
编程语言: Python 3.8
文本编译器: Vscode
所需库:pandas >= 0.23.0, matplotlib >= 2.2.2 , numpy >= 1.19.5,scikit-learn > 0.19.1
代码如下(示例):
def permutation_entropy(y, m, t):
"""
计算排列熵
输入:y:时间序列;
m:排列熵的阶数
t:排列熵的延迟时间,
输出:
pe:排列熵
hist:顺序分布的直方图
"""
# Calculate the length of the time series
ly = len(y)
# Generate all possible permutations of integers from 1 to m
permlist = list(permutations(range(1, m+1)))
c = np.zeros(len(permlist))
# Generate all possible permutations of integers from 1 to m
for j in range(ly - t * (m - 1)):
# Sort the values and get the sorted indices
_, iv = zip(*sorted(enumerate(y[j:t+j]), key=lambda x: x[1]))
iv = np.array(iv) + 1
# Check for each permutation and update the count
for jj, perm in enumerate(permlist):
if np.array_equal(np.array(perm), iv):
c[jj] += 1
# Extract non-zero counts as histogram
hist = c[c != 0]
# Calculate probabilities
p = hist / np.sum(hist)
pe = -np.sum(p * np.log(p))
return pe, hist
其他部分的程序与信息熵权法、TOPSIS熵权法、近似熵权法、样本熵权法、模糊熵权法类似,可自行参考。
结果图
以上就是本节对传感数据进行排列熵权法计算输出综合评价值的内容,本文简单介绍了传感数据分析中排列熵权法基本公式及Python的实现,具体见资源传感数据分析-Permutation Entropy Weight Method(排列熵权法,后续还会持续更新本系列,收藏过100,后台联系我,我会免费将熵权法全部相关的代码都发给你。