补充R语言版本:
张敬信:【R语言】熵权法确定权重zhuanlan.zhihu.com一、基本原理
在信息论中,熵是对不确定性的一种度量。不确定性越大,熵就越大,包含的信息量越大;不确定性越小,熵就越小,包含的信息量就越小。
根据熵的特性,可以通过计算熵值来判断一个事件的随机性及无序程度,也可以用熵值来判断某个指标的离散程度,指标的离散程度越大,该指标对综合评价的影响(权重)越大。比如样本数据在某指标下取值都相等,则该指标对总体评价的影响为0,权值为0.
熵权法是一种客观赋权法,因为它仅依赖于数据本身的离散性。
二、熵值法步骤
1. 对
2. 指标的归一化处理:异质指标同质化
由于各项指标的计量单位并不统一,因此在用它们计算综合指标前,先要进行标准化处理,即把指标的绝对值转化为相对值,从而解决各项不同质指标值的同质化问题。
另外,正向指标和负向指标数值代表的含义不同(正向指标数值越高越好,负向指标数值越低越好),因此,对于正向负向指标需要采用不同的算法进行数据标准化处理:
为了方便起见,归一化后的数据
3. 计算第
4. 计算第
其中,
5. 计算信息熵冗余度(差异):
6. 计算各项指标的权重:
7. 计算各样本的综合得分:
其中,
三、Matlab实现
按上述算法步骤,编写Matlab函数:shang.m
function
用到的归一化函数:
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 type
case 1
for j=1:m
y(:,j)=(ymax-ymin)*(x(:,j)-xmin(j))/(xmax(j)-xmin(j))+ymin;
end
case 2
for j=1:m
y(:,j)=(ymax-ymin)*(xmax(j)-x(:,j))/(xmax(j)-xmin(j))+ymin;
end
end
程序测试,现有数据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
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。