传感数据分析——Entropy Weight Method (熵权法)
熵是对不确定信息的度量。对于多传感数据分析而言,传感数据中必然存在不确定的信息和确定的信息。当数据中包含的不确定信息越多,熵也就越大,反之亦然。我们可以利用熵权法对传感数据中重要信息提取,并输出一个综合性的评估指标。
传感数据分析——Entropy Weight Method (熵权法)
前言
熵是对不确定信息的度量。对于多传感数据分析而言,传感数据中必然存在不确定的信息和确定的信息。当数据中包含的不确定信息越多,熵也就越大,反之亦然。我们可以利用熵权法对传感数据中重要信息提取,并输出一个综合性的评估指标。
本文正文内容
一、基础理论
基本概念
① 归一化:绝对量==>相对量
计算负向指标:
z
i
j
′
=
z
i
j
−
z
min
z
max
−
z
min
\begin{equation}z_{ij}^{^{\prime}}=\frac{z_{ij}-z_{\min}}{z_{\max}-z_{\min}}\end{equation}
zij′=zmax−zminzij−zmin
计算正向指标:
z
i
j
′
=
z
max
−
z
i
j
z
max
−
z
min
\begin{equation}z_{ij}^{^{\prime}}=\frac{z_{\max}-z_{ij}}{z_{\max}-z_{\min}}\end{equation}
zij′=zmax−zminzmax−zij
②计算比重,这里的比重指的是不同的指标对应不同的样本数量的比重,可以当作熵计算中需要的概率大小:
x
i
j
=
z
i
j
′
/
∑
i
=
1
N
z
i
j
′
\begin{equation}x_{ij}=z_{ij}^{'}/\sum_{i=1}^{N}z_{ij}^{'}\end{equation}
xij=zij′/i=1∑Nzij′
③求熵值,
f
E
n
f_{En}
fEn泛指计算出熵值的公式:
e
j
=
f
E
n
(
x
i
j
)
,
i
∈
[
1
,
N
]
,
e
j
∈
[
0
,
1
]
\begin{equation}e_j=f_{En}(x_{ij}),i\in[1,N],e_j\in[0,1]\end{equation}
ej=fEn(xij),i∈[1,N],ej∈[0,1]
④计算信息效用值,计算每个数据对应的信息效用值。信息效用值就是差异系数,
信息效用值越大,数据携带的特征越多:
d
j
=
1
−
e
j
\begin{equation}d_j=1-e_j\end{equation}
dj=1−ej
⑤计算信息效用值归一化的值,得到每个指标的权重大小:
ω
j
=
d
j
/
∑
j
=
1
N
d
j
\begin{equation}\omega_j=d_j/\sum_{j=1}^Nd_j\end{equation}
ωj=dj/j=1∑Ndj
⑥加权求和,计算得到熵权法输出值(综合评价指标):
S
i
=
∑
j
=
1
M
ω
j
x
i
j
,
i
=
1
,
2
,
⋯
,
N
\begin{equation}S_i=\sum_{j=1}^M\omega_jx_{ij},i=1,2,\cdots,N\end{equation}
Si=j=1∑Mωjxij,i=1,2,⋯,N
z
i
j
z_{ij}
zij是传感器数据中第
i
i
i 行和第
j
j
j 列的原始数据。式(3)中,
x
i
j
x_{ij}
xij是比重。式(4)中,
e
e
e 是
x
i
j
x_{ij}
xij 的熵值。
f
E
n
f_{En}
fEn泛指计算出熵值的公式。式(5)~(6)中,
d
d
d是的信息效用值,也称信息冗余度。
ω
\omega
ω 是 EWM 得到的每列数据对应的权重,
S
S
S 是 熵权法 输出的结果,
M
M
M 是传感器数据中总的列数,
N
N
N 是传感器数据中总的行数。
对于常用的信息熵而言,式(4)可以表示为:
f
I
n
E
n
j
=
−
1
ln
N
∑
i
=
1
N
x
i
j
l
n
x
i
j
,
f
I
n
E
n
j
∈
[
0
,
1
]
\begin{equation}f_{InEn_j}=-\frac1{\ln N}\sum_{i=1}^Nx_{ij}\mathrm{~ln}x_{ij},f_{InEn_j}\in[0,1]\end{equation}
fInEnj=−lnN1i=1∑Nxij lnxij,fInEnj∈[0,1]
后续后会补上:近似熵(Approximate Entropy,ApEn)、样本熵(Sample Entropy,SampEn)、模糊熵(Fuzzy Entropy,FuzzyEn)和排列熵(Permutation Entropy,PeEn)。
==========================================
相关公式叙述可以见大佬的博客:【熵与特征提取】从近似熵,到样本熵,到模糊熵,再到排列熵,究竟实现了什么?。
二、运行环境
系统: Windows 10 / Ubuntu 20.04
编程语言: Python 3.8
文本编译器: Vscode
所需库:pandas >= 0.23.0, matplotlib >= 2.2.2 , numpy >= 1.19.5
三、使用步骤
1.引入库
代码如下(示例):
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
2.读入数据
代码如下(示例):
# 导入数据
data=pd.read_excel("dataset/dataset_test1.xlsx", sheet_name=0,header=0,index_col=0)
# 保存路径
save_path = './result/'
# 调用熵权法函数处理数据
entropy_weight_method(data, save_path)
该处读取dataset文件夹下的数据,可以修改为你目录下的数据文件。
3.熵权法
代码如下(示例):
def entropy_weight_method(data, save_path):
"""
熵权法函数:
输入:
data: pd.dataFrame格式数据
save_path: 熵权法输出值保存目录
无返回值
"""
#获取行数m和列数n
m,n=data.shape
print("行数:", m, "列数: ", n)
#标准化矩阵
Y_ij=min_max_matrix(data, n)
#新建空矩阵
none_ij = [[0.0] * n for i in range(m)]
#熵值
E_j = entropy_j(Y_ij, none_ij,m, n)
#计算差异系数
G_j = 1 - E_j
#计算权重
W_j = G_j / sum(G_j)
# 转为pd.Series格式
Weights= pd.Series(W_j, index=data.columns, name='指标权重')
# 保存到excel
Weights.to_excel(save_path + "Entropy_weight.xlsx",sheet_name='Weights')
# 原数据×权重=最终结果
Y_ij = np.array(Y_ij)
Z_ij = np.array(none_ij)
score = np.array([[0.0] for i in range(m)])
for i in range(m):
temp_sum = 0
for j in range(n):
#计算加权标准化矩阵Z_ij
Z_ij[i][j]=Y_ij[i][j]*W_j[j]
temp_sum += Z_ij[i][j]
score[i] = temp_sum
# 保存熵权法输出值
score_pd = pd.DataFrame(score, columns=['熵权法结果'])
score_pd.to_excel(save_path + "score_entropy.xlsx", sheet_name="EWMscores")
# 绘图
plt.figure(figsize=(16,9))
plt.plot(score)
plt.legend(['EWM Scores'])
plt.title("Entropy Weight Method Test", fontsize=18)
plt.savefig("")
plt.show()
def min_max_matrix(data1, n):
"""
矩阵标准化(min-max标准化)
"""
for i in data1.columns:
for j in range(n+1):
#负向指标
if i == str(f'X{j}负'):
data1[i]=(np.max(data1[i])-data1[i])/(np.max(data1[i])-np.min(data1[i]))
#正向指标
else:
data1[i]=(data1[i]-np.min(data1[i]))/(np.max(data1[i])-np.min(data1[i]))
return data1
结果图
总结
以上就是本节对传感数据进行熵权法计算输出综合评价值的内容,本文简单介绍了传感数据分析中熵权法基本公式及Python的实现(改为自己的数据集即可),对entropy_j函数的实现,可见传感数据分析-Entropy Weight Method (熵权法)。
更多推荐
所有评论(0)