熵值法的应用及matlab代码实现

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/printf88/article/details/80469437

熵值法是指用来判断某个指标的离散程度的数学方法。离散程度越大,对该指标对综合评价的影响越大。可以用熵值判断某个指标的离散程度

用    途判断某个指标的 离散程度



离散程度越大

该指标对综合评价的影响越大





熵    是

对不确定性的一种度量 信息量越大,不确定性

就越小,熵也就越小;信息量越小,不确定越大                                                                                 




(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)计算第j项指标的 差异系数。对第项指标,指标值的差异越大,对方案评价的左右就越大,熵值就越小,定义差异系数。
(6)求权值。
(7)计算各国家的综合得分。

代码如下;

function w = shang1(A)%% 熵权法求指标权重,A为输入矩阵,返回权重向量w

[rows,cols] = size(A); % 矩阵的大小
k = 1/log(rows);        % 求k


f = zeros(rows,cols);   % 初始化
sumBycols = sum(A,1);   % 矩阵的每一列之和
%计算f(i,j)
for i = 1:rows
  for j = 1:cols
      f(i,j) = A(i,j)./sumBycols(1,j);
  end
end


lnfij = zeros(rows,cols); % 初始化ln f(i,j)
% 计算
for i = 1:rows
  for j = 1:cols
      if f(i,j)==0
          lnfij(i,j) = 0;
      else
          lnfij(i,j) = log(f(i,j));
      end
  end
end


Hj = -k*(sum(f.*lnfij,1)); % 计算熵值
w = (1-Hj)/(cols-sum(Hj));%权重
end

猜你喜欢

转载自blog.csdn.net/printf88/article/details/80469437