数学建模--熵权法(评价决策类)
·
1.概念
熵权法(Entropy Weight Method)是一种客观赋权方法,通过计算指标数据的离散程度确定权重。其核心思想是:数据离散程度越大,信息量越多,权重越高;反之,离散程度小的指标权重低。
前面的方法计算权值都有主观因素,比如我认为伤害与子弹速度相比更重要,角色数值比人气更重要,但是这样是有主观因素的,而熵权法就只和数据离散程度有关,给出的权值就是完全客观的。
这个方法就是打分/选择/评价过程的一环
2. 计算过程
1.数据正向化+标准化
对标准化矩阵记作Z
如果所有元素都是正数
常规标准化
如果存在负数元素
2.计算概率矩阵P
计算每一项指标下,第i个样本所占的比重
3.计算熵权
这里当
注意这里n是一个常数
此时信息熵最大,但是信息效用最小
定义信息效用 ,此时效用值越大,权重越大
将信息效用值归一化,得到熵权
3.代码
%熵权法
%对正向化后的矩阵标准化
%判断是否需要正向化
X=input('指标矩阵A=');
[n,m]=size(X);
disp(['共有' num2str(n) '个评价对象',num2str(m) '个评价指标']);
Judge = input(['这' num2str(m) '个指标是否需要正向化处理,需要输入1,不需要输入0:']);
if Judge==1
Position=input('请输入需要正向化处理的指标所在的列,例如第2,3,6列现需要处理,那么输入[2,3,6]:');
disp('请输入需要处理的这些列的指标类型(1:极小型,2:中间型,3:区间型)');
Type=input('例如:第2列是极小型,第3列是区间型,第6列是中间型,需要输入[1,3,2]');
for i=1:size(position,2)
X(:,Position(i))=Positivization(X(:,Position(i)),Type(i),Position(i));
end
disp('正向化后矩阵X=');
disp(X);
end
%正向化
Z=X ./ repmat(sum(X .* X) .^ 0.5,n,1);%repmat默认是每一行相加,最终是一个行向量,然后复制n行1列
disp('标准化矩阵 Z = ');
disp(Z)
%计算熵权
D=zeros(1,m);
for i=1:m
x=Z(:,i);
p=x/sum(x);
e=-sum(p .* clog(p)) / log(n);
D(i)=1-e;
end
W=D ./ sum(D);
disp('权重W=');
disp(W);
function [lnp]= clog(p)主要是考虑有0不能用ln的情况
n=length(p);
lnp=zeros(n,1);
for i = 1:n
if p(i)==0
lnp(i)=0;
else
lnp(i)=log(p(i));
end
end
end
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)