熵值法在matlab上的实现
1.熵值法原理
熵值法是一种客观赋权法,其根据各项指标观测值所提供的信息的大小来确定指标权重。设有m个待评方案,n项评价指标,形成原始指标数据矩阵X=(xij)m×n,对于某项指标xj,指标值xij的差距越大,则该指标在综合评价中所起的作用越大;如果某项指标的指标值全部相等,则该指标在综合评价中不起作用。
在信息论中,熵是对不确定性的一种度量。信息量越大,不确定性就越小,熵也就越小;信息量越小,不确定性就越大,熵也越大.根据熵的特性,我们可以通过计算熵值来判断一个方案的随机性及无序程度,也可以用熵值来判断某个指标的离散程度,指标的离散程度越大,该指标对综合评价的影响越大!因此,可根据各项指标的变异程度,利用信息熵这个工具,计算出各个指标的权重,为多指标综合评价提供依据!
2.算法实现过程
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代码
-
clc;clear;
-
x=[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];
-
lamda=[1,1,1,1,1,1];%---人为修权,1代表不修改计算后的指标权重
-
[m,n]=size(x);
-
for i=1:n
-
x(:,i)=(x(:,i)-min(x(:,i)))/(max(x(:,i))-min(x(:,i)))+1;%对原始数据进行非负数化、归一化处理,值介于1-2之间
-
end
-
for i=1:m
-
for j=1:n
-
p(i,j)=x(i,j)/sum(x(:,j));
-
end
-
end
-
k=1/log(m);
-
for i=1:m
-
for j=1:n
-
if p(i,j)~=0
-
e(i,j)=p(i,j)*log(p(i,j));
-
else
-
e(i,j)=0;
-
end
-
end
-
end
-
for j=1:n
-
E(j)=-k*sum(e(:,j));
-
end
-
d=1-E;
-
for j=1:n
-
w(j)=d(j)/sum(d);%指标权重计算
-
end
-
for j=1:n
-
w(j)=w(j)*lamda(j)/sum(w.*lamda);% 修改指标权重
-
end
-
for i=1:m
-
score(i,1)=sum(x(i,:).*w);%计算综合分数
-
end
-
disp('各指标权重为:')
-
disp(w)
-
disp('各品牌综合分数为:')
-
disp(score)
运行结果
所以在购买汽车时,据所提供信息,利用熵值法计算得出的权重为油耗占12.81%,功率占13.23%,费用占15%,安全性占15.35%,维护性占24%,操作性占19.6%。故我们在进行购买决策时,更多是考虑车型的维护性、操作性和安全性等重要因素。这是从权重角度考虑的。
就本例而言,每个车型每个指标的得分与其权重的乘积之和为其综合评价值,这样求得本田1.098分,奥迪1.644分,桑塔纳1.4511分,别克1.489分。所以综合评价排序为奥迪、别克、桑塔纳、本田。