熵权法介绍
- 原理:指标的变异程度越小,所反映的信息量也越少,其对应的权值也应该越低。(客观 = 数据本身就可以告诉我们权重)
- 如何度量信息量的大小?
- 用表示信息量,表示概率,那么我们可以将它们建立一个函数关系。
- 假设表示事件可能发生的某种情况,表示这种情况发生的概率,我们可以定义,因为,所以.
- 信息熵的定义
- 如果事件可能发生的情况分别为:,那么我们可以定义事件的信息熵为:从上面的公式可以看出,信息熵的本质就是对信息量的期望值.
- 可以证明的是,当时,取最大值,此时
- 信息熵越大,信息量越小
熵权法的计算步骤
- 判断输入的矩阵中是否有负数,有则要重新标准化到非负区间.
如果有负数,则用另一种标准化方法,标准化公式为: - 计算第项指标下第个样本所占的比重,并将其看作相对熵计算中用到的概率
概率计算公式如下: - 计算每个指标的信息熵,并计算信息效用值,并归一化得到每个指标的熵权.
对于第个指标而言,其信息熵的计算公式为:
信息效用值的定义:,那么信息效用值越大,其对应的信息就越多
将信息效用值归一化,得到每个指标的熵权:
熵权法的缺点
有的指标的方差很小,但是对结果有很大影响,用熵权法就不恰当
熵权法代码
function [W] = Entropy_Method(Z)
[n,m] = size(Z);
D = zeros(1,m); %初始化用来保存信息效用值的行向量
for i = 1:m
x = Z(:,i); %取出第i列的指标
p = x / sum(x); %归一化
e = -sum(p .* mylog(p)) / log(n); %计算信息熵
%mylog函数是对log函数的修改,当p为0时,mylog函数返回0
D(i) = 1 - e;
end
W = D ./ sum(D); %将信息效用值归一化得到熵权
end
如果有负数,需要重新标准化
if sum(sum(Z<0)) > 0 %判断是否有负数
for i = 1:n
for j = 1:m
Z(i,j) = [X(i,j) - min(X(:,j))] / [max(X(:,j)) - min(X(:,j))]
end
end
end