欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

综合评价体系之熵权法

时间:2023-08-22

(一)建模目的:

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

(二)熵权法的原理:

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

(三)基本步骤:

 1)数据标准化处理

对原始矩阵进行标准化:

 2)信息熵的计算

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

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

3)权重的计算

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

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

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

(2)计算正负理想解:

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

     

(4)计算综合评价值:

     

(三) 具体实际应用

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

(2)理解字符串的筛选

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

import pandas as pdimport numpy as npdata=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 data1Y_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_jE_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_ijImax_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]) ** 2Dmax_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 - 知乎

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。