目录
前言
前面我们学习了层次分析法和Topsis法,这两个方法都是偏主观的方法,这篇我们将运用较为客观的方法——熵权法,做出决策
一、熵权法是什么?
概念:我们用熵值判断某个指标的离散程度,其信息熵值越小,指标的离散程度越大,该指标对综合评价的影响越大
原理:指标的变异程度越小,所反映的信息量也越少,其对应的权值也应该越低,如果某项指
标的值全部相等,则该指标在综合评价中不起作用
如:假如我们要选出模特
这里我们发现模特的身高都差不多,那么身高这个指标明显对我们评价的影响要小,而体重的差异很大,其应该对我们的决策比较重要
二、基本步骤
前面对矩阵进行正向化以及标准化处理(这个地方需要注意的是:正向化后的矩阵元素可能为负数)的步骤与Topsis法是相同的,这里不再过多赘述,不记得大家可以再看下:
Topsis中的正向化和标准化处理http://t.csdnimg.cn/8qwtR
计算样本权重及熵权
步骤:
- 计算第 j 项指标下第 i 个样本所占的比重
(归一化)
- 对于第j个指标,信息熵的计算公式为:
-
(易知,当P1j=P2j=…=Pnj=1/n时,ej=1,此时信息熵最大,但其信息效用值最小)
- 定义信息效用值dj=1-ej,此时效用值越大,权重越大。
- 将信息效用值进行归一化,得到熵权Wj
%计算熵权
X = zeros(1,m);%初始化保存信息效用值的行向量
for i = 1:m
C = B(:,i); %取出第i列的指标
p = C /sum(C); %矩阵归一化
%注意,P有可能为0,此时计算ln(p)*p时,Matlab会返回NaN,所以我们自己定义一个函数
e =-sum(p.* myself_log(p))/log(n); %计算信息熵
X(i) = 1-e; %计算信息效用值
end
Q = X ./sum(X) ; %将信息效用值归一化,得到权重
disp('权重Q=');
disp(Q);
这里考虑到p可能为0的情况,但是ln函数的底不能为0,则我们自己定义一个mysel_log函数
%重新定义一个myselflog函数,当输入的p中的元素为0时,返回0
function lnp = myselflog(p)
L =length(p); %计算向量的长度
lnp = zeros(L,1);%先对最后的返回结果初始化
for i = 1:L
if p(i)==0 %第i个元素为0
lnp(i)=0;
else
lnp(i) = log(p(i));
end
end
end
总结
以上代码仅供参考,不可用于数模比赛