综合评价体系之熵权法

综合评价体系之熵权法,第1张

综合评价体系之熵权法

(一)建模目的:

   如何客观又合理地评价一部电影的受欢迎度呢?生活中有很多这样的场景,仅有个别人的看法,显然不能如实地反映这部电影的受欢迎度,通过抽样的方法,选取合理的指标建立评价模型,最终取得一个得分来相对评价电影的受欢迎度。

(二)熵权法的原理:

  熵衡量着系统的混乱程度,可以拿来衡量信息的多少。指标的变异程度越小,所反映的现有信息量越少,其对应的权重也越低。也就是说,熵权法是使用指标内部所包含的信息量,来确定该指标在所有指标之中的地位。

(三)基本步骤:

 1)数据标准化处理

对原始矩阵进行标准化:

 2)信息熵的计算

(1)计算第项指标在第i年的数值占该指标比重():

 (2)计算第j项指标熵值(),当时,,

3)权重的计算

计算第j项指标的变异系数()和权重():

4)计算TOPSIS中的优劣距离和综合评价得分

(1)由标准化矩阵和各指标权重可得加权标准化矩阵:

(2)计算正负理想解:

(3)计算正负理想解的欧式距离:

     

(4)计算综合评价值:

     

(三) 具体实际应用

(1)学习正向指标和负向指标在实际场合的应用。一般来说,从数学的角度,通过相关矩阵正相关关系为正向指标,负相关关系为负向指标,当然并不是绝对的;从实际生活的角度,一个变量的增大导致最终因变量的增大,如在现实生活中,我们通常认为,一个学生的期末成绩通常与作业的完成质量,期中成绩,课堂的出勤率及参与度有正相关,与缺勤率呈负相关。实际应用中,应具体结合数据和实际意义来确定正向指标和负向指标。 

(2)理解字符串的筛选

   i == str(f'X{j}负')

import pandas as pd
import numpy as np
data=pd.read_excel("data.xlsx", sheet_name=0,header=0,index_col=0) #读取数据
m,n=data.shape  #获取行数m和列数n
#熵权法计算
def Y_ij(data1):   #矩阵标准化(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
Y_ij=Y_ij(data)  #标准化矩阵
None_ij = [[None] * n for i in range(m)]  #新建空矩阵
def E_j(data3):  #计算熵值
    data3 = np.array(data3)
    E = 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)
            E[i][j] = e_ij
    E_j=E.sum(axis=0)
    return E_j
E_j = E_j(Y_ij)  #熵值
G_j = 1 - E_j    #计算差异系数
W_j = G_j / sum(G_j)   #计算权重
WW= pd.Series(W_j, index=data.columns, name='指标权重')
#print(WW)
Y_ij.to_excel("Y_ij.xls",sheet_name='Y_ij')
WW.to_excel("WW.xls",sheet_name='WW')

#TOPSIS计算
Y_ij = np.array(Y_ij)  #Y_ij为标准化矩阵
Z_ij = np.array(None_ij)  #空矩阵
for i in range(m):
    for j in range(n):
        Z_ij[i][j]=Y_ij[i][j]*W_j[j]  #计算加权标准化矩阵Z_ij
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  #最劣解欧氏距离
C_i=Dmin_i/(Dmax_i+Dmin_i)  #综合评价值
Dmax_i= pd.Series(Dmax_i, index=data.index, name='最优解')
Dmin_i= pd.Series(Dmin_i, index=data.index, name='最劣解')
C_i= pd.Series(C_i, index=data.index, name='综合评价值')
pd.concat([Dmax_i, Dmin_i, C_i]).to_excel("C_i.xls")

(四)与其他综合评价的区别:

层次分析法:与之相比,较强的主观性;判断矩阵基本由个人填写,往往最适用没有数据的情况。在确定各层次各因素之间的权重时,如果只是定性的结果,单个个体的想法(我认为有70%的可能),则常常不容易被别人接受,因此Santy等人提出了一致矩阵法,即:

    不把所有因素放在一起比较,而是两两比较;对此时采用相对尺度,以尽可能减少性质不同的诸因素相互比较的困难,以提高准确性;

成对比较矩阵是表示本层所有因素针对上一层某一个因素(准侧或目标)的相对重要性的比较。成对比较矩阵的元素   表示的是第 个因素相对于第  个因素的比较结果,这个值使用的是Santy的1-9标度方法给出。

标度含义1表示两个因素相比,具有同样重要性3表示两个因素相比,一个因素比另一个因素稍微重要5表示两个因素相比,一个因素比另一个因素明显重要7表示两个因素相比,一个因素比另一个因素强烈重要9表示两个因素相比,一个因素比另一个因素极端重要2,4,6,8上述两相邻判断的中值倒数因素i与j相比的判断aij,则因素j与i比较的判断aji=1/aij

参考文档:数学建模笔记——评价类模型之熵权法 - 简书

层次分析法(AHP) - 知乎

Python学习笔记——熵权—TOPSIS - 知乎

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5721067.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-18
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存