传感数据分析——TOPSIS-Entropy Weight Method

本文介绍了如何使用改进的TOPSIS-Entropy权重法对多传感数据进行评估,包括基础概念、Python实现步骤,以及在Windows10/Ubuntu20.04环境下使用Python3.8处理数据的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

传感数据分析——TOPSIS-Entropy Weight Method


前言

上期文章传感数据分析——Entropy Weight Method (熵权法)中,已经将熵权法用于多传感数据分析中,最终得到一个评估指标,本期将改进版的熵权法——TOPSIS(优劣解距离法)熵权法用于多传感数据分析中。


本文正文内容

一、基础概念

上期文章传感数据分析——Entropy Weight Method (熵权法)中叙述了熵权法的基本步骤,本期不再赘述。
TOPSIS法的关键就是求得最优方案和最劣方案,并计算与最优/最劣方案的距离,这样就可以得到相对准确的评估。
确定最优方案(最大值集合):
Z + = ( max ⁡ { z 11 , z 21 , ⋯   , z n 1 } , max ⁡ { z 12 , z 22 , ⋯   , z n 2 } , ⋯   , max ⁡ { z 1 m , z 2 m , ⋯   , z n m } ) = ( Z 1 + , Z 2 + , ⋯   , Z m + ) \begin{equation}\begin{aligned} &Z^+=(\max{\{z_{11},z_{21},\cdots,z_{n1}\}},\max\{z_{12},z_{22},\cdots,z_{n2}\},\cdots,\max\{z_{1m},z_{2m},\cdots,z_{nm}\}) \\ &=(Z_1^+,Z_2^+,\cdots,Z_m^+) \end{aligned}\end{equation} Z+=(max{z11,z21,,zn1},max{z12,z22,,zn2},,max{z1m,z2m,,znm})=(Z1+,Z2+,,Zm+)
确定最劣方案(最小值集合):
Z − = ( min ⁡ { z 11 , z 21 , ⋯   , z n 1 } , min ⁡ { z 12 , z 22 , ⋯   , z n 2 } , ⋯   , min ⁡ { z 1 m , z 2 m , ⋯   , z n m } ) = ( Z 1 − , Z 2 − , ⋯   , Z m − ) \begin{equation}\begin{aligned} &Z^-=(\min{\{z_{11},z_{21},\cdots,z_{n1}\}},\min\{z_{12},z_{22},\cdots,z_{n2}\},\cdots,\min\{z_{1m},z_{2m},\cdots,z_{nm}\}) \\ &=(Z_1^-,Z_2^-,\cdots,Z_m^-)\end{aligned}\end{equation} Z=(min{z11,z21,,zn1},min{z12,z22,,zn2},,min{z1m,z2m,,znm})=(Z1,Z2,,Zm)
与最优/最劣方案的接近程度:
D i + = ∑ j = 1 m w j ( Z j + − z i j ) 2 \begin{equation}D_i^+=\sqrt{\sum_{j=1}^mw_j(Z_j^+-z_{ij})^2}\end{equation} Di+=j=1mwj(Zj+zij)2
D i − = ∑ j = 1 m w j ( Z j − − z i j ) 2 \begin{equation}D_i^-=\sqrt{\sum_{j=1}^mw_j(Z_j^--z_{ij})^2}\end{equation} Di=j=1mwj(Zjzij)2
此处的 w j w_j wj是熵值法得到的权重值。
计算综合评价值:
C i = D i − D i + + D i − \begin{equation}C_i=\frac{D_i^-}{D_i^++D_i^-}\end{equation} Ci=Di++DiDi
对公式的详细描述与解释可参考大佬博客TOPSIS法(优劣解距离法)介绍及 python3 实现

==========================================

二、运行环境

系统: 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/'
    # 调用TOPSIS-熵权法函数处理数据
    topsis_EWM(data, save_path)

该处读取dataset文件夹下的数据,可以修改为你目录下的数据文件。


3.TOPSIS熵权法

代码如下(示例):

def topsis_EWM(data, save_path):
    """
    TOPSIS-Entropy熵权法函数:
    输入:
    data: pd.dataFrame格式数据
    save_path: TOPSIS-Entropy熵权法输出值保存目录
    无返回值
    """
    #获取行数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 + "TOPSIS-Entropy_weight.xlsx",sheet_name='Weights')
    # 原数据×权重=最终结果
    Y_ij = np.array(Y_ij)
    score = topsis(none_ij, Y_ij, W_j, m, n)
    # 保存熵权法输出值
    score_pd = pd.DataFrame(score, columns=['TOPSIS-EWM结果'])  
    score_pd.to_excel(save_path + "score_topsis_entropy.xlsx", sheet_name="TOPSIS-EWMscores")
    # 绘图并保存
    plt.figure(figsize=(16,9))
    plt.plot(score)
    plt.legend(['EWM Scores'])
    plt.title("TOSIS-Entropy Weight Method Test", fontsize=18)
    plt.savefig(save_path + "TOPSIS-EWM_scores.png")
    plt.show()

def topsis(none_ij, Y_ij, W_j, m, n):
    #空矩阵
    Z_ij = np.array(none_ij)  
    for i in range(m):
        for j in range(n):
            #计算加权标准化矩阵Z_ij
            Z_ij[i][j]=Y_ij[i][j]*W_j[j]  
    #最优解
    Imax_j=Z_ij.max(axis=0) 
    #最劣解 
    Imin_j=Z_ij.min(axis=0)  
    Dmax_ij = np.array(none_ij)
    Dmin_ij = np.array(none_ij)
    for i in range(m):
        for j in range(n):
            Dmax_ij[i][j] = (Imax_j[j] - Z_ij[i][j]) ** 2
            Dmin_ij[i][j] = (Imin_j[j] - Z_ij[i][j]) ** 2
    #最优解欧氏距离
    Dmax_i=Dmax_ij.sum(axis=1)**0.5 
    #最劣解欧氏距离 
    Dmin_i=Dmin_ij.sum(axis=1)**0.5  
    #综合评价值
    score=Dmin_i/(Dmax_i+Dmin_i)  
    return score

        
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

def entropy_j(data3, none_ij, m, n):  
    """
    计算熵值
    """
    data3 = np.array(data3)
    en = np.array(none_ij)
    for i in range(m):
        for j in range(n):
            if data3[i][j] == 0:
                e_ij = 0.0
            else:
                #计算比重
                P_ij = data3[i][j] / data3.sum(axis=0)[j]  
                e_ij = (-1 / np.log(m)) * P_ij * np.log(P_ij)
            en[i][j] = e_ij
    en_j=en.sum(axis=0)
    return en_j

结果图
在这里插入图片描述


总结

以上就是本节对传感数据进行TOPSIS熵权法计算输出综合评价值的内容,本文简单介绍了传感数据分析中TOPSIS熵权法基本公式及Python的实现(改为自己的数据集即可),具体代码可见传感数据分析-TOPSIS-Entropy Weight Method

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值