熵值法在matlab上的实现

1.熵值法原理

      熵值法是一种客观赋权法,其根据各项指标观测值所提供的信息的大小来确定指标权重。设有m个待评方案,n项评价指标,形成原始指标数据矩阵X=(xij)m×n,对于某项指标xj,指标值xij的差距越大,则该指标在综合评价中所起的作用越大;如果某项指标的指标值全部相等,则该指标在综合评价中不起作用。

      在信息论中,熵是对不确定性的一种度量。信息量越大,不确定性就越小,熵也就越小;信息量越小,不确定性就越大,熵也越大.根据熵的特性,我们可以通过计算熵值来判断一个方案的随机性及无序程度,也可以用熵值来判断某个指标的离散程度,指标的离散程度越大,该指标对综合评价的影响越大!因此,可根据各项指标的变异程度,利用信息熵这个工具,计算出各个指标的权重,为多指标综合评价提供依据!

2.算法实现过程

熵值法在matlab上的实现

熵值法在matlab上的实现

3.熵值法的优缺点

     优点:熵值法是根据各项指标指标值的变异程度来确定指标权数的,这是一种客观赋权法,避免了人为因素带来的偏差。

     缺点:忽略了指标本身重要程度,有时确定的指标权数会与预期的结果相差甚远,同时熵值法不能减少评价指标的维数!

4.案例

      下表是购买教车的一个决策矩阵,给出了四个方案供我们进行选择,每个方案中均有相同的六个属性(假设均为正向指标),我们需要利用熵值法求出各属性的权重,以及每个方案的综合分数。

  油耗 功率 费用 安全性 维护性 操作性
本田 5 1.4 6 3 5 7
奥迪 9 2 30 7 5 9
桑塔纳 8 1.8 11 5 7 5
别克 12 2.5 18 7 5 5

matlab代码

 
  1. clc;clear;

  2. x=[5 1.4 6 3 5 7

  3. 9 2 30 7 5 9

  4. 8 1.8 11 5 7 5

  5. 12 2.5 18 7 5 5];

  6. lamda=[1,1,1,1,1,1];%---人为修权,1代表不修改计算后的指标权重

  7. [m,n]=size(x);

  8. for i=1:n

  9. x(:,i)=(x(:,i)-min(x(:,i)))/(max(x(:,i))-min(x(:,i)))+1;%对原始数据进行非负数化、归一化处理,值介于1-2之间

  10. end

  11. for i=1:m

  12. for j=1:n

  13. p(i,j)=x(i,j)/sum(x(:,j));

  14. end

  15. end

  16. k=1/log(m);

  17. for i=1:m

  18. for j=1:n

  19. if p(i,j)~=0

  20. e(i,j)=p(i,j)*log(p(i,j));

  21. else

  22. e(i,j)=0;

  23. end

  24. end

  25. end

  26. for j=1:n

  27. E(j)=-k*sum(e(:,j));

  28. end

  29. d=1-E;

  30. for j=1:n

  31. w(j)=d(j)/sum(d);%指标权重计算

  32. end

  33. for j=1:n

  34. w(j)=w(j)*lamda(j)/sum(w.*lamda);% 修改指标权重

  35. end

  36. for i=1:m

  37. score(i,1)=sum(x(i,:).*w);%计算综合分数

  38. end

  39. disp('各指标权重为:')

  40. disp(w)

  41. disp('各品牌综合分数为:')

  42. disp(score)

运行结果

熵值法在matlab上的实现

      所以在购买汽车时,据所提供信息,利用熵值法计算得出的权重为油耗占12.81%,功率占13.23%,费用占15%,安全性占15.35%,维护性占24%,操作性占19.6%。故我们在进行购买决策时,更多是考虑车型的维护性、操作性和安全性等重要因素。这是从权重角度考虑的。

     就本例而言,每个车型每个指标的得分与其权重的乘积之和为其综合评价值,这样求得本田1.098分,奥迪1.644分,桑塔纳1.4511分,别克1.489分。所以综合评价排序为奥迪、别克、桑塔纳、本田。