熵权法确定权重

一、基本原理

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

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

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

二、熵值法步骤

1.n个样本,m个指标,则{x}_{ij}为第i个样本的第j个指标的数值(i=1,2,3\cdots nj=1,2,3\cdots ,m);

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

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

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

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

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

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

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

{d}_{j}=1-{e}_{j},j=1,\cdots ,m

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

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

其中,{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:m
    if 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);
    end
end
%%计算第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=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 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

  • 5
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值