我是靠谱客的博主 懦弱小天鹅,最近开发中收集的这篇文章主要介绍熵权法及matlab实现,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、基本原理

在信息论中,熵是对不确定性的一种度量。信息量越大,不确定性就越小,熵也就越小;信息量越小,不确定性越大,熵也越大。
根据熵的特性,可以通过计算熵值来判断一个事件的随机性及无序程度,也可以用熵值来判断某个指标的离散程度,指标的离散程度越大,该指标对综合评价的影响(权重)越大,其熵值越小。
二、熵值法步骤

  1. 选取n个对象,m个指标,则为第i个对象的第j个指标的数值(i=1, 2…, n; j=1,2,…, m);
  2. 指标的归一化处理:异质指标同质化
    由于各项指标的计量单位并不统一,因此在用它们计算综合指标前,先要对它们进行标准化处理,即把指标的绝对值转化为相对值,并令,从而解决各项不同质指标值的同质化问题。而且,由于正向指标和负向指标数值代表的含义不同(正向指标数值越高越好,负向指标数值越低越好),因此,对于高低指标我们用不同的算法进行数据标准化处理。其具体方法如下:
    正向指标:
    负向指标:
    则为第i个对象的第j个指标的数值(i=1, 2…, n; j=1, 2,…, m)。为了方便起见,归一化后的数据仍记为;
  3. 计算第j项指标下第i个对象占该指标的比重:
  4. 计算第j项指标的熵值:
  5. 计算信息熵冗余度:
  6. 计算各项指标的权值:
  7. 计算各国家的综合得分:
    注:对正逆指标归一化的时候如果采用的方法不一样,正指标归一化得到的值会大一些,逆指标的归一化得到的值会小一些,然后算权重,逆指标对应的权重也会相应的小,从而逆指标对应的得分也小些,就相当于对逆指标进行了处理。如果对正逆指标归一化采用的方法一样,为了体现逆指标的不利影响,最后应该总分减去逆指标的得分的。两种方法不同,但都是为了体现逆指标对综合得分的不利影响。

function [s,w]=weight(x)
% 函数weight.m, 实现用熵值法求各指标(列)的权重及各数据行的得分
% x为原始数据矩阵, 一行代表一个对象, 每列对应一个指标
% s返回各行得分, w返回各列权重
[n,m]=size(x); % 返回对象个数n, 指标个数m

%% 数据的归一化处理
% 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为归一化后的数据, n行(对象), m列(指标)

%% 计算第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]

最后

以上就是懦弱小天鹅为你收集整理的熵权法及matlab实现的全部内容,希望文章能够帮你解决熵权法及matlab实现所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部