目录

1.原理介绍

2.基本步骤

3.步骤详解

3.1 数据归一化(标准化)

3.2 计算第j项指标下第i个方案的指标值比重

3.3 计算第j项指标的信息熵值

3.4 计算各指标权重

4.案例分析

4.1 题目简介

4.2 标准化后数据

4.3 计算第j项指标下第i个方案的指标值比重

4.4 计算第j项指标的信息熵值

4.5  计算各指标权重

4.6 计算得分

5.代码实现

5.1 代码(Java)

5.2 运行截图


1.原理介绍

熵是对不确定信息的度量,熵与信息量成反比,熵值越小越好。熵值越小,信息量越大,权重越大。

前文所讲的层次分析法是一种具有很强主观性的赋权方法,而熵权法则是一种客观赋权法,即可以通过数据本身计算出权重。

2.基本步骤

3.步骤详解

3.1 数据归一化(标准化)

由于各项指标计量单位不统一,因此在计算综合权重前要先对其进行归一化处理,即把指标的绝对值转化为相对值。

对于正向指标:

对于负向指标:

其中系数0.998和0.002的目的是为了使  的值大于0,防止在后续计算时出现的情况。这里的0.998可以更改成任意更接近于1的数,如:0.999,0.997等。

3.2 计算第j项指标下第i个方案的指标值比重

,且      

3.3 计算第j项指标的信息熵值

,其中   

3.4 计算各指标权重

4.案例分析

4.1 题目简介

已知判断某一水域水质情况的好坏时可以通过x1-x9共9种指标来评判,现有A-K共11条河流的指标测量情况,请以此判断各河流水质的优良

河流 x1 x2 x3 x4 x5 x6 x7 x8 x9
A 88 63 17 50 53 49 64 24 32
B 75 1 2 43 14 53 31 18 42
C 79 48 73 62 43 48 72 76 98
D 73 95 9 34 20 46 54 4 59
E 36 70 53 5 100 6 74 25 43
F 40 46 92 60 68 19 2 76 8
G 20 78 35 98 83 70 35 58 1
H 67 29 38 3 32 27 3 47 75
I 38 30 28 72 46 20 50 42 74
J 95 25 20 42 13 54 56 54 82
K 40 32 27 14 22 59 6 81 53

4.2 标准化后数据

河流 x1 x2 x3 x4 x5 x6 x7 x8 x9
A 0.924853 0.678255 0.186333 0.513747 0.478851 0.690531 0.879389 0.279221 0.338948
B 0.751867 0.02 0.02 0.440211 0.031471 0.752906 0.421972 0.201455 0.441835
C 0.805093 0.519 0.807311 0.639811 0.364138 0.674938 0.990278 0.953195 1.018
D 0.725253 1.018 0.097622 0.345663 0.100299 0.64375 0.740778 0.02 0.616742
E 0.232907 0.752574 0.585533 0.041011 1.018 0.02 1.018 0.292182 0.452124
F 0.286133 0.497766 1.018 0.6188 0.65092 0.222719 0.02 0.953195 0.092021
G 0.02 0.837511 0.385933 1.018 0.822989 1.018 0.477417 0.719896 0.02
H 0.645413 0.317277 0.4192 0.02 0.237954 0.347469 0.033861 0.577325 0.781361
I 0.25952 0.327894 0.308311 0.744863 0.398552 0.238312 0.685333 0.512519 0.771072
J 1.018 0.274809 0.2196 0.429705 0.02 0.7685 0.7685 0.668052 0.853381
K 0.286133 0.349128 0.297222 0.135558 0.123241 0.846469 0.075444 1.018 0.55501

4.3 计算第j项指标下第i个方案的指标值比重

河流 x1 x2 x3 x4 x5 x6 x7 x8 x9
A 0.155303 0.121286 0.042884 0.103843 0.112766 0.110954 0.143903 0.045072 0.057057
B 0.126254 0.003576 0.004603 0.088979 0.007411 0.120976 0.069052 0.032519 0.074377
C 0.135192 0.092808 0.185799 0.129323 0.085752 0.108448 0.162049 0.153864 0.171366
D 0.121785 0.182039 0.022467 0.069868 0.02362 0.103437 0.121221 0.003228 0.10382
E 0.03911 0.134575 0.134758 0.008289 0.239732 0.003214 0.166586 0.047164 0.076109
F 0.048048 0.089011 0.234289 0.125077 0.153287 0.035786 0.003273 0.153864 0.01549
G 0.003358 0.149764 0.088821 0.205766 0.193808 0.163571 0.078125 0.116205 0.003367
H 0.108379 0.056735 0.096477 0.004043 0.056036 0.055831 0.005541 0.093191 0.131531
I 0.043579 0.058634 0.070957 0.150557 0.093856 0.038292 0.112148 0.082731 0.129799
J 0.170944 0.049141 0.05054 0.086855 0.00471 0.123482 0.125757 0.107837 0.143655
K 0.048048 0.062431 0.068405 0.0274 0.029022 0.13601 0.012346 0.164325 0.093428

4.4 计算第j项指标的信息熵值

指标 x1 x2 x3 x4 x5 x6 x7 x8 x9
信息熵值 0.915132 0.928591 0.888545 0.894166 0.851147 0.92768 0.884052 0.919145 0.919939

4.5  计算各指标权重

指标 x1 x2 x3 x4 x5 x6 x7 x8 x9
权重 0.09737 0.081928 0.127874 0.121424 0.17078 0.082974 0.133028 0.092766 0.091855

4.6 计算得分

河流 x1 x2 x3 x4 x5 x6 x7 x8 x9 得分
A 88 63 17 50 53 49 64 24 32 48.77173
B 75 1 2 43 14 53 31 18 42 29.30177
C 79 48 73 62 43 48 72 76 98 65.44425
D 73 95 9 34 20 46 54 4 59 40.37694
E 36 70 53 5 100 6 74 25 43 50.31363
F 40 46 92 60 68 19 2 76 8 47.95403
G 20 78 35 98 83 70 35 58 1 54.82417
H 67 29 38 3 32 27 3 47 75 33.47667
I 38 30 28 72 46 20 50 42 74 45.34118
J 95 25 20 42 13 54 56 54 82 45.64744
K 40 32 27 14 22 59 6 81 53 33.50219

由以上得分可得河流水质情况由好到差依次为C>G>E>A>F>J>I>D>K>H>B

5.代码实现

5.1 代码(Java)

package EWM;import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import jxl.write.WriteException;public class ewm {//private String filepath;//文件路径private double[][] orig; //原始矩阵private double[][] uniform;//归一化后的矩阵 int rows,cols;//存储Excel的行和列数Scanner input = new Scanner(System.in);//矩阵每列最大值public double[] Max(double[][] m) {double max[] = new double[m[0].length];for(int j=0;j < m[0].length;j++) {max[j] = m[0][j];for(int i=0;i < m.length;i++) {if(m[i][j] >= max[j]) {max[j] = m[i][j];}}}return max;}//矩阵每列最小值public double[] Min(double[][] m) {double min[] = new double[m[0].length];for(int j=0;j < m[0].length;j++) {min[j] = m[0][j];for(int i=0;i < m.length;i++) {if(m[i][j] <= min[j]) {min[j] = m[i][j];}}}return min;}public void matrixoutput(double[][] x) {for(int i=0;i<x.length;i++) {for(int j=0;j<x[0].length;j++) {System.out.print(x[i][j]+"   ");}System.out.println();}}//读取数据public double[][] read(String filepath) throws IOException, BiffException,WriteException {//创建输入流InputStream stream = new FileInputStream(filepath);//获取Excel文件对象Workbook  rwb = Workbook.getWorkbook(stream);//获取文件的指定工作表 默认的第一个Sheet sheet = rwb.getSheet("Sheet1");rows = sheet.getRows();cols = sheet.getColumns();orig = new double[rows][cols];uniform = new double[rows][cols];//row为行for(int i=0;i<sheet.getRows();i++) {for(int j=0;j<sheet.getColumns();j++) {String[] str = new String[sheet.getColumns()];Cell cell = null;cell = sheet.getCell(j,i);    str[j] = cell.getContents();orig[i][j] = Double.valueOf(str[j]);//uniform[i][j] = Double.valueOf(str[j]);}}return orig;}//数据归一化public double[][] uniform(double[][] x) {List<Integer> neg = new ArrayList<Integer>();//存储逆向指标所在列for(int i=0;i<x.length;i++) {for(int j=0;j<x[0].length;j++) {uniform[i][j] = 0.998*(x[i][j] - Min(x)[j])/(Max(x)[j] - Min(x)[j]) + 0.002;}}System.out.println("数据中是否有逆向指标?是:1,否:2");int a = input.nextInt();if(a == 1) {System.out.println("输入逆向指标所在列(以“/”结尾):");while(!input.hasNext("/")) {neg.add(Integer.valueOf(input.nextInt()));}for(int i=0;i<x.length;i++) {for(int j=0;j<neg.size();j++) {uniform[i][neg.get(j)] = 0.998*(Max(x)[neg.get(j)] - x[i][neg.get(j)])/(Max(x)[neg.get(j)] - Min(x)[neg.get(j)]) + 0.002;}}}return uniform;}//确定第j个指标在第i个项目的比重Pijpublic double[][] Pig(double[][] m){double[][] p = new double[m.length][m[0].length];double[] sum = new double[m[0].length];//每列之和for(int j=0;j<m[0].length;j++) {sum[j] = 0;for(int i=0;i<m.length;i++) {sum[j] += m[i][j];}}for(int j=0;j<m[0].length;j++) {for(int i=0;i<m.length;i++) {p[i][j] = m[i][j]/sum[j];}}return p;}//计算第j项指标的信息熵值eijpublic double[] Eij(double[][] p) {double[] e = new double[p[0].length];double k = 1/Math.log(p.length);double[] sum = new double[p[0].length];for(int j=0;j<p[0].length;j++) {sum[j] = 0;for(int i=0;i<p.length;i++) {sum[j] += p[i][j]*Math.log(p[i][j]);}}for(int j=0;j<p[0].length;j++) {e[j] = -1*k*sum[j];}return e;}//计算各指标的权值public double[] weight(double[] e) {double[] w = new double[e.length];double sum = 0;for(int j=0;j<e.length;j++) {sum += (1-e[j]);}for(int j=0;j<e.length;j++) {w[j] = (1-e[j])/sum;}return w;}
}
package EWM;import java.io.IOException;import jxl.read.biff.BiffException;
import jxl.write.WriteException;public class ewmmain {public static void main(String args[]) throws BiffException, WriteException, IOException {ewm ewm = new ewm();double[][] a = ewm.read("ewm.xls");//输出原始矩阵,行为评价对象,列为评价指标System.out.println("原始矩阵为:");ewm.matrixoutput(a);double[][] x = ewm.uniform(a);System.out.println("标准化(归一化)矩阵:");ewm.matrixoutput(x);double[][] p = ewm.Pig(x);System.out.println("确定第j个指标在第i个项目的比重Pij矩阵:");ewm.matrixoutput(p);double[] e = ewm.Eij(p);System.out.println("确定第j个指标的信息熵值:");for(int i=0;i<e.length;i++) {System.out.print(e[i]+"    ");}System.out.println();double[] w = ewm.weight(e);System.out.println("确定各指标的权值:");for(int i=0;i<w.length;i++) {System.out.print(w[i]+"    ");}}
}

5.2 运行截图

权重计算方法二:熵权法(EWM)相关推荐

  1. 一文速学数模-评价模型(二)熵权法实战确定评价指标权重

    目录 前言 一.熵权法介绍 二.使用步骤 1.数据预处理 2.计算指标信息熵

  2. 多目标决策问题1.1.1:线性加权法——熵权法确定权重

    多目标决策问题是目前数学建模中比较普遍的一类问题, 此类问题要求我们满足多个目标函数最优与决策变量的线性约束条件或非线性约束条件下进行求解, 多目标决策问题主要有主要目标法.线性加权法.分层序列法.步 ...

  3. Python小案例(六)通过熵权法计算指标权重

    Python小案例(六)通过熵权法计算指标权重 在日常业务中,产品运营需要综合多个指标进行判断,如果没有目标变量进行监督训练的话,很难人为地判断哪个指标更好,综合起来哪个类别更优秀. 这里介绍一种基于 ...

  4. 基于熵权法对TOPSIS法模型的修正

    最近在学习数学建模,在B站发现一个特别不错的课程,讲的很全面,常考的算法都有涉及到:清风数学建模 本文将结合熵权法介绍TOPSIS法,并将淡化原理的推导,更侧重于具体应用. TOPSIS法 概述 TO ...

  5. 熵权法EW与层次分析法AHP之数学原理及实例

    1.概述 对于多指标或多目标决策问题,由于涉及到多个指标或属性,在对实测数据进行评价时,需要确定这些指标之间的相互权重,各指标权重的客观性与合理性也会大大影响到最终的评价结果.目前对于指标权重确定的方 ...

  6. 基于熵权法优劣解距离法_基于优劣解距离法的火电机组单辅机运行状态评估

    龙源期刊网 http://www.qikan.com.cn 基于优劣解距离法的火电机组单辅机运行状 态评估 作者:王瑾石 来源:<中国化工贸易 · 上旬刊> 2019 年第 01 期 摘要 ...

  7. [数据分析][评价方法]打分式评价-信息熵理论与熵权法

    前言: 信息熵是一种用于衡量系统内部信息量的度量.在信息论中,信息是系统有序程度的一种度量. 信息是确定性的增加,不确定性的减少(香农定理).而信息熵是系统无序程度的一种度量,是系统不确定性的量度.两 ...

  8. 数学建模笔记 Topsis和熵权法

    Topsis法(Technique for Order Preference by Similarity to Ideal Solution)可翻译为逼近理想解排序法,国内常简称为优劣解距离法. ​ ...

  9. 权重设计:客观赋权法的说明(熵权法/变异系数法/CRCIII法/TOPSIS法)

    在数据分析中,我们经常会遇到多个特征对于结果造成不同影响的情况,如何识别这些特征各自的权重,对我们的后续结果评估,打分矩阵构建都具有重要意义.我们所说的赋权法是用于解决多指标综合评价问题中的各指标权重 ...

  10. 数学建模笔记-熵权法确定评价类问题指标的权重 清风课程笔记整理

    评价类问题: 1.层次分析法入门学习: https://blog.csdn.net/weixin_47066458/article/details/113177117 2.Topsisi入门学习: h ...

最新文章

  1. 我的博客今天2岁104天了,我领取了…
  2. 小米10的Android安全更新,MIUI 12首批更新名单被曝光,小米10系列优先上Android 11...
  3. C++在windows下获取本地主机ipv4地址和ipv6地址的代码
  4. 深入探讨JS中的数组排序函数sort()和reverse()
  5. Java生产环境下性能监控与调优详解 第8章 JVM字节码与Java代码层调优
  6. 多线程下单例模式:懒加载(延迟加载)和即时加载
  7. 28 岁字节程序员退休,财务自由
  8. bo蓝牙耳机怎么连接_超简单!电脑连接蓝牙音箱,蓝牙耳机!
  9. STM8L051低功耗实现
  10. 黑苹果 驱动有线网卡 Intel i225-V 驱动教程
  11. 智能不止联络,容联助力银行以服务创造价值
  12. mysql基础学习--day7
  13. python matplotlib pColor 网格线 消除
  14. 用 Python 制作“会跳舞”的动态图表
  15. Shiro学习笔记(二):自定义Realm的实现
  16. Ubuntu 编译ijkplayer 支持几乎所有格式(MP4,mov,mkv,avi,wmv,m4v,mpg,webm,ogv,3g2.flv,f4v,swf)和https
  17. 编写代码实现简单的扫雷游戏
  18. 国际标准书号 (International Standard Book Number, ISBN)是专门为识别图书等文献而设计的国际编号
  19. 数据分析(二)特征值和特征向量、奇异值、傅里叶变换
  20. 机器学习笔记---从极大似然估计的角度看待Logistic回归

热门文章

  1. 家用千兆路由器哪款好?家用千兆无线路由器推荐TOP10!
  2. mysql 水晶报表_Crystal Reports 2008(水晶报表) JDBC连接mysql数据库
  3. win7设置动态桌面,将视频设为桌面
  4. 【元胞自动机】基于元胞自动机实现艺术图像处理附matlab代码
  5. 【预测模型】基于BP神经网络实短时交通流预测matlab代码
  6. STM32读取伺服电机编码器信号
  7. 酷派大观4 8970 刷android 4.4,酷派大观4电信版如何刷机?【图文教程】
  8. 湖南中斯:使用SpreadJS 构建云表单
  9. 阜阳智慧城市建设居全国地市级城市第11位
  10. 智慧警务三维PGIS及一标三实采集、展示平台