一、基本原理

在信息论中,熵是对不确定性的一种度量。信息量越大,不确定性就越小,熵也就越小;信息量越小,不确定性越大,熵也越大。

根据熵的特性,可以通过计算熵值来判断一个事件的随机性及无序程度,也可以用熵值来判断某个指标的离散程度,指标的离散程度越大,该指标对综合评价的影响(权重)越大,其熵值越小。

二、熵值法步骤

1. 选取n个国家,m个指标,则\[x_{ij}\]为第i个国家的第j个指标的数值(i=1, 2…, n; j=1,2,…, m);

2. 指标的归一化处理:异质指标同质化

由于各项指标的计量单位并不统一,因此在用它们计算综合指标前,先要对它们进行标准化处理,即把指标的绝对值转化为相对值,并令\[x_{ij}=|x_{ij}|\],从而解决各项不同质指标值的同质化问题。而且,由于正向指标和负向指标数值代表的含义不同(正向指标数值越高越好,负向指标数值越低越好),因此,对于高低指标我们用不同的算法进行数据标准化处理。其具体方法如下:

正向指标:

\[x'_{ij}=\frac{x_{ij}-\min\{x_{ij},\cdots,x_{nj}\}}{\max\{x_{1j},\cdots,x_{nj}\}-\min\{x_{1j},\cdots,x_{nj}\}}\]

负向指标:

\[x'_{ij}=\frac{\max\{x_{1j},\cdots,x_{nj}\}-x_{ij}}{\max\{x_{1j},\cdots,x_{nj}\}-\min\{x_{ij},\cdots,x_{nj}\}}\]

则\[x'_{ij}\]为第i个国家的第j个指标的数值(i=1, 2…, n; j=1, 2,…, m)。为了方便起见,归一化后的数据仍记为\[x_{ij}\];

3. 计算第j项指标下第i个国家占该指标的比重:

\[p_{ij}=\dfrac{x_{ij}}{\sum\limits_{i=1}^nx_{ij}}, \qquad i=1,\cdots,n,\,j=1,\cdots,m\]

4. 计算第j项指标的熵值:

\[e_j=-k\sum\limits_{i=1}^n p_{ij} ln(p_{ij})\]

其中\[k=1/ln(n) > 0\]. 满足\[e_j \geq 0\];

5. 计算信息熵冗余度:

\[d_j=1-e_j\]

6. 计算各项指标的权值:

\[w_j=\dfrac{d_j}{\sum\limits_{j=1}^md_j}\]

7. 计算各国家的综合得分:

\[s_i=\sum_{j=1}^mw_j \cdot p_{ij}\]

[code]function [s,w]=shang(x)

% 函数shang.m, 实现用熵值法求各指标(列)的权重及各数据行的得分

% x为原始数据矩阵, 一行代表一个国家, 每列对应一个指标

% s返回各行得分, w返回各列权重

[n,m]=size(x); % n=23个国家, m=5个指标

%% 数据的归一化处理

% Matlab2010b,2011a,b版本都有bug,需如下处理. 其它版本直接用[X,ps]=mapminmax(x',0,1);即可

[X,ps]=mapminmax(x');

ps.ymin=0.002; % 归一化后的最小值

ps.ymax=0.996; % 归一化后的最大值

ps.yrange=ps.ymax-ps.ymin; % 归一化后的极差,若不调整该值, 则逆运算会出错

X=mapminmax(x',ps);

% mapminmax('reverse',xx,ps); % 反归一化, 回到原数据

X=X';  % X为归一化后的数据, 23行(国家), 5列(指标)

%% 计算第j个指标下,第i个记录占该指标的比重p(i,j)

for i=1:n

for j=1:m

p(i,j)=X(i,j)/sum(X(:,j));

end

end

%% 计算第j个指标的熵值e(j)

k=1/log(n);

for j=1:m

e(j)=-k*sum(p(:,j).*log(p(:,j)));

end

d=ones(1,m)-e;  % 计算信息熵冗余度

w=d./sum(d);    % 求权值w

s=w*p';         % 求综合得分[\code]

测试程序:data.txt数据如下:114.6 1.1 0.71 85.0 346

55.3 0.96 0.4 69.0 300

132.4 0.97 0.54 73.0 410

152.1 1.04 0.49 77.0 433

103.5 0.96 0.66 67.0 385

81.0 1.08 0.54 96.0 336

179.3 0.88 0.59 89.0 446

29.8 0.83 0.49 120.0 289

92.7 1.15 0.44 154.0 300

248.6 0.79 0.5 147.0 483

115.0 0.74 0.65 252.0 453

64.9 0.59 0.5 167.0 402

163.6 0.85 0.58 220.0 495

95.7 1.02 0.48 160.0 384

139.5 0.70 0.59 217.0 478

89.9 0.96 0.39 105.0 314

76.7 0.95 0.51 162.0 341

121.8 0.83 0.60 140.0 401

42.1 1.08 0.47 110.0 326

78.5 0.89 0.44 94.0 280

77.8 1.19 0.57 91.0 364

90.0 0.95 0.43 89.0 301

100.6 0.82 0.59 83.0 456

执行代码:

[code]x=load('data.txt');  %读入数据

[s,w]=shang(x)[\code]

运行结果:s =

Columns 1 through 9

0.0431    0.0103   0.0371    0.0404    0.0369    0.0322   0.0507    0.0229    0.0397

Columns 10 through 18

0.0693    0.0878   0.0466    0.0860    0.0503    0.0800   0.0234    0.0456    0.0536

Columns 19 through 23

0.0272    0.0181   0.0364    0.0202    0.0420

w =

0.1660    0.0981   0.1757    0.3348    0.2254

熵值权重法matlab程序,熵值法确定权重原理及Matlab实现相关推荐

  1. 易语言取linux命令返回值,易语言取程序返回值写法

    公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:易语言取程序返回值写法回答:在易语言中,程序包括"处理程序"都有六部分组成.一.程序名,就是程序的名称,程序名不 ...

  2. 幅值测量c语言程序,幅值和电平测量程序块

    幅值和电平测量程序块可以通过LabVIEW提供的测量Ⅵ的测量得到周期性波形的幅值和电平大小.幅值可 以通过高低电平位置相减得到.这3个测量参数同样反映出周期性波形的基本特性,在周期性波形的测量 中常常 ...

  3. 数学建模中matlab程序,数学建模中常用的30个MATLAB程序和函数

    <数学建模中常用的30个MATLAB程序和函数>由会员分享,可在线阅读,更多相关<数学建模中常用的30个MATLAB程序和函数(15页珍藏版)>请在人人文库网上搜索. 1.内部 ...

  4. matlab程序eX2_2是什么意思,第2章 MATLAB程序设计

    第2章MATLAB程序设计基础 Matlab以矩阵为运算单元,除非特殊需要,矩阵不必事先定义维数大小.Matlab还提供了丰富的矩阵运算函数,如求逆矩阵的inv函数,求方阵行列式的det函数,求矩阵特 ...

  5. 二维方向图matlab程序,二维点源阵方向图,阵因子matlab

    10x10点源天线阵方向图的MATLAB程序 dx=0.01;%点源间距 f=1e10;%周期 c0=3e8;%波速 lam=c0/f; M=10; Theta=0:0.01*pi:pi; Phi=0 ...

  6. 密切值matlab程序,密切值法

    [编辑] 什么是密切值法 密切值法是系统工程中多目标决策的一种优选方法.多目标决策由于考虑的目标多,标准多,有些目标之间还存在着矛盾,这就使多目标问题成为一个复杂而困难的问题,密切值法是解决有限方案多 ...

  7. anp的matlab程序实现,网络分析法ANP的Matalab程序源码(未完待续)

    用了两周左右的时间,我编写了网络分析法(The Analytic Network Process,ANP)的Matlab源代码(将在下面给出),主要针对王莲芬老师的<网络分析法(ANP)的理论与 ...

  8. 卫星测控matlab程序,北斗卫星导航信号串行捕获算法MATLAB仿真报告(附MATLAB程序).docx...

    PAGE 4 北斗卫星导航信号串行捕获算法MATLAB仿真报告 原理 卫星导航信号的串行捕获算法如图1所示. 图1 卫星导航信号的串行捕获算法 接收机始终在本地不停地产生对应某特定卫星的本地伪码,并且 ...

  9. 全变分 tv 图像matlab程序,全变分(TV)模型原理与C++实现

    https://blog.csdn.net/cyh706510441/article/details/45194223 本文介绍了TV模型的基本原理,并给出了C++代码实现. 一.TV模型原理 二.C ...

  10. 奇异值分解的反变换matlab程序,奇异值分解(SVD)基础概念及MATLAB仿真

    奇异值分解(SVD)基础概念及MATLAB仿真 奇异值分解(SVD)基础概念及MATLAB仿真 奇异值分解(singular value decomposition,简称SVD)不仅广泛应用于机器学习 ...

最新文章

  1. 后台的代理nginx部署方法
  2. TFLearn 在给定模型精度时候提前终止训练
  3. 第3 章体系结构(Architecture)
  4. 如何让excel表格排头一直都在_Excel表格技巧—如何计算矩阵相乘
  5. vrml场景实例代码_高并发的中断下半部tasklet实例解析
  6. Guava ImmutableCollection简介
  7. 【Windows】关于shift和空格同时按无反应的解决方案
  8. CentOS7 搭建Ambari-Server,安装Hadoop集群(一)
  9. 一个服务器端和多个客户端消息互发_python:OSError: [WinError 10022] 提供了一个无效的参数...
  10. 实验一缓冲区溢出漏洞实验
  11. python︱写markdown一样写网页,代码快速生成web工具:streamlit 缓存(五)
  12. Zabbix proxy配置
  13. 卡第那思让法铁的螺丝紧固件的数量一年内减少了15%
  14. RuntimeError: Cannot re-initialize CUDA in forked subprocess. To use CUDA with multiprocessing, you
  15. fastai 文本分类_使用Fastai v2和多标签文本分类器检查有毒评论
  16. asp.net房屋出租销售网
  17. EasyMesh - A Two-Dimensional Quality Mesh Generator
  18. Centos7 SSH远程登录十分缓慢的解决方案
  19. C语言通过指针交换两个数
  20. 51单片机学习——语音模块

热门文章

  1. css label 样式
  2. “应用程序无响应”原因汇总
  3. unshift() 方法php,unshift方法怎么使用
  4. 单生狗必备之如何用Python给PLMM表白
  5. 读书笔记 ——《系统程序员成长计划》篇4:拥抱变化
  6. 提升电脑性能的经典技巧
  7. C编译器剖析_5.2.1 中间代码生成及优化_布尔表达式的翻译
  8. python手把手安装_小白手把手搭建python开发环境
  9. 谈谈数据仓库架构的发展和分类
  10. 英雄联盟 python 刷等级_自从学了python,我再也不缺英雄联盟的皮肤了