01������������������������,【评价算法】01. 熵权法确定权重

补充R语言版本:一、基本原理

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

根据熵的特性,可以通过计算熵值来判断一个事件的随机性及无序程度,也可以用熵值来判断某个指标的离散程度,指标的离散程度越大,该指标对综合评价的影响(权重)越大。比如样本数据在某指标下取值都相等,则该指标对总体评价的影响为0,权值为0.

熵权法是一种客观赋权法,因为它仅依赖于数据本身的离散性。

二、熵值法步骤

1. 对 n 个样本, m 个指标,则 x_{ij} 为第 i 个样本的第 j 个指标的数值( i=1,\,\cdots,\,n; \; j=1, \, \cdots, \, m );

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

由于各项指标的计量单位并不统一,因此在用它们计算综合指标前,先要进行标准化处理,即把指标的绝对值转化为相对值,从而解决各项不同质指标值的同质化问题。

另外,正向指标和负向指标数值代表的含义不同(正向指标数值越高越好,负向指标数值越低越好),因此,对于正向负向指标需要采用不同的算法进行数据标准化处理:

为了方便起见,归一化后的数据 x'_{ij} 仍记为 x_{ij} ;

3. 计算第 j 项指标下第 i 个样本值占该指标的比重:

p_{ij}=\frac{x_{ij}}{\sum\limits_{i=1}^n x_{ij}}, \quad i=1,\, \cdots,\,n,\;j=1,\,\cdots,\,m

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

e_j=-k\sum_{i=1}^n p_{ij} \ln(p_{ij}), \quad j=1,\,\cdots,\,m

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

5. 计算信息熵冗余度(差异):

d_j=1-e_j, \quad j=1,\,\cdots,\,m

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

w_j=\frac{d_j}{\sum\limits_{j=1}^m d_j},\quad j=1,\,\cdots,\,m

7. 计算各样本的综合得分:

s_i=\sum_{j=1}^m w_j x_{ij}, \quad i=1,\,\cdots,\,n

其中, x_{ij} 为标准化后的数据。

三、Matlab实现

按上述算法步骤,编写Matlab函数:shang.m

function [s,w]=shang(x,ind)%实现用熵值法求各指标(列)的权重及各数据行的得分%x为原始数据矩阵, 一行代表一个样本, 每列对应一个指标%ind指示向量,指示各列正向指标还是负向指标,1表示正向指标,2表示负向指标%s返回各行(样本)得分,w返回各列权重[n,m]=size(x); % n个样本, m个指标%%数据的归一化处理for i=1:mif ind(i)==1 %正向指标归一化X(:,i)=guiyi(x(:,i),1,0.002,0.996);%若归一化到[0,1], 0会出问题else %负向指标归一化X(:,i)=guiyi(x(:,i),2,0.002,0.996);endend%%计算第j个指标下,第i个样本占该指标的比重p(i,j)for i=1:nfor j=1:mp(i,j)=X(i,j)/sum(X(:,j));endend%%计算第j个指标的熵值e(j)k=1/log(n);for j=1:me(j)=-k*sum(p(:,j).*log(p(:,j)));endd=ones(1,m)-e; %计算信息熵冗余度w=d./sum(d); %求权值ws=100*w*X'; %求综合得分

用到的归一化函数:

function y=guiyi(x,type,ymin,ymax)%实现正向或负向指标归一化,返回归一化后的数据矩阵%x为原始数据矩阵, 一行代表一个样本, 每列对应一个指标%type设定正向指标1,负向指标2%ymin,ymax为归一化的区间端点[n,m]=size(x);y=zeros(n,m);xmin=min(x);xmax=max(x);switch typecase 1for j=1:my(:,j)=(ymax-ymin)*(x(:,j)-xmin(j))/(xmax(j)-xmin(j))+ymin;endcase 2for j=1:my(:,j)=(ymax-ymin)*(xmax(j)-x(:,j))/(xmax(j)-xmin(j))+ymin;endend

程序测试,现有数据shang_datas.mat, 为2014年31个省份的就业与劳动保障数据, 包含5个指标:社会养老保险参保率、医疗保险参保率、失业保险参保率、工伤保险参保率、工伤事故发生率, 其中第5个指标为负向指标。

执行代码:

load shang_datas

Ind=[1 1 1 1 2]; %指定各指标的正向or负向

[S,W]=shang(X,Ind)

运行结果:

S =

Columns 1 through 9

3.2624 11.7822 5.2952 1.3521 2.5262 2.0425 4.4215 2.6953 2.5208

Columns 10 through 18

7.8834 4.7410 7.4679 1.4645 3.2541 1.6292 3.3035 1.6282 1.9043

Columns 19 through 27

2.0526 7.8582 0.7256 3.8943 3.7992 1.7187 0.7766 0.6445 2.0167

Columns 28 through 31

0.7801 1.3353 2.2775 2.9462

W= 0.0896 0.2195 0.3330 0.3073 0.0506

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

【评价算法】01. 熵权法确定权重 - 知乎很多文章中用1.01的365次方= 37.8 0.99的365次方 = 0.03来 ...围猎·行贿者说 | 第二集:香饵有毒 金钩勿吞——中纪委视频 ...习近平:共同构建人类命运共同体-新华网 - XINHUANET.com第1章 部署虚拟环境安装linux系统。 | 《Linux就该这么学》我的世界Minecraft中国版官方网站——你想玩的,这里都有Neuron | Journal | ScienceDirect.com by Elsevier《英雄萨姆4》v1.0-v1.01十五项修改器风灵月影版 - ALi213.NetBiological Industries USA - Culture of Excellence解决AndroidStudio报错显示���的问题mysql连接Java报java.sql.SQLException: The server time zone value ‘�й���׼ʱ��‘ is ...报错The server time zone value ‘�й���׼ʱ��‘ is unrecognized or represents more than one ...使用JDBC连接数据库出现The server time zone value ‘�й���׼ʱ��‘ is unrecognized 的解决方案连接mysql数据库报错java.sql.SQLException: The server time zone value '�й���׼ʱ��' is ...项目启动报错:java.sql.SQLException: The server time zone value ‘�й���׼ʱ��‘ is ...springBoot连接数据库错误: The server time zone value ‘�й���׼ʱ��‘ is unrecognized or ...【异常】springBoot连接数据库错误: The server time zone value ‘�й���׼ʱ��‘ is unrecognized...Java编译时出现����,黑色菱形里面有问号,为什么?jdbc连接数据库报错:The server time zone value ‘�й���׼ʱ��‘ is unrecognized or represents ...InvalidConnectionAttributeException: The server time zone value '�й���׼ʱ��' is unrecog-...mysql连接出错,报The server time zone value ‘�й���׼ʱ��‘ is unrecognized or represents ...the server time zone value ‘�й���׼ʱ��‘ is unrecognized or represents more than one time ...The server time zone value ‘�й���׼ʱ��‘ is unrecognized or represents more than one time ...Java 掉坑之The server time zone value ‘�й���׼ʱ��‘ is unrecognized or represents more than...连接mysql报错java.sql.SQLException: The server time zone value ‘�й���׼ʱ��‘ is ...使用JDBC连接MySql时出现:The server time zone value ‘�й���׼ʱ��‘ is unrecognized or ...FreeBSD 6 手��� MySQL5 (最佳化)(ZT)generate (default-cli) on project mall: The server time zone value ‘�й���׼ʱ��‘ is ...Java.sql.SQLException: The server time zone value ‘й���׼ʱ��‘ is unrecognized or represents...‘“node“‘ �����ڲ����ⲿ���Ҳ���ǿ����еij������������ļ��� ...java.sql.SQLException: The server time zone value ‘�й���׼ʱ��‘ is unrecognized or ...在使用springboot+jpa+mysql时出现The server time zone value ‘�й���׼ʱ��‘ is unrecognized ...java.sql.SQLException The server time zone value ‘�й���׼ʱ��‘....及数据库时间与本地时间不...关于sql异常The server time zone value ‘�й���׼ʱ��‘ is unrecognized or represents more than...androidx.fragment.app.Fragment�޷�ת��Ϊandroid.app.Fragment fragmentTransaction.replace报错ADODB.Connection ���� ‘800a0e7a’ win7 IIS运行ASP常见问题及解决方法java?e7?a8??e9?a8ӿEasyClick易点云测 执行错误:Didn‘t find ...com.js.sad���͵�"; on path: DexPathList 解决方法