美赛BOOM数学建模3-3熵权法
注明:本文根据数学建模BOOM网课简单整理,自用
❑ 模型简介
❑ 从考试成绩说起
• 张三、李四和王五的考试成绩如下表所示
• 观察这份成绩表,有哪门科目最容易拉开差距?哪门课又最不容易拉开差距?

❑ 熵的概念
• 信息论中,熵是对不确定性的一种度量,可判断一个事件的随机性及无序程度
• 用熵值判断某个指标的离散程度,指标的离散程度越大,该指标对综合评价的影响越大
❑ 直观看熵:考试成绩
• 某一门课“不易拉开差距”,意味着这一门课对最终总成绩排名影响很小
• 所有人的化学成绩相同,意味着“整齐划一”,相应混乱程度就低
❑ 熵的现实意义
• 本模型中,混乱程度低对应着熵值接近1,评价总成绩时可给该指标赋予低权重
• 即使这门课的成绩不算进总成绩(权重为0),总成绩的排名也是不会变的
• 相对的,数学的分数差距较大,如果去掉这门课,总成绩排名可能出现变化

❑ 适用赛题
❑ 数据全面、缺少文献或主观依据的题目
• 例如评价河流水质,已知河流的含氧量、PH值、细菌密度、生物密度等数据
• 但缺乏评价水质的文献资料,或者文献内的说法不一
• 即文献很难帮助我们确定影响水质最重要的因素是哪一个
• 也很难告诉我们其余指标的重要程度如何衡量
• 此时即可使用熵权法,根据数据本身建立评价体系
❑ 注意事项
• 熵权法与其他方法(层次分析法、TOPSIS法等)最大的区别就是完全客观
• 追求“公平公正”的情况,可优先考虑熵权法
• 但有时“完全客观”也是缺点,难以将数据之外的因素考虑进去
❑ 典型例题与原理讲解
❑典型例题
❑ 根据下表给出的10个学生8门课的成绩,给出这10个学生评奖学金的评分排序

❑数据标准化
❑ 标准化的原因
• 评价体系中,存在数值越大越好的正向指标,和数值越小越好的负向指标
• 不同指标数量级也可能不同;且求熵的公式中用到对数函数,变量不允许有负值
❑ 变量定义
• 设𝑥𝑖𝑗为第𝑖个学生的第𝑗门课程的成绩;本题中所有指标(各科成绩)都是正向指标
❑ 正向指标标准化

❑ 负向指标标准化

❑ 标准化之后,𝑎𝑖𝑗所有值在[0,1]区间内,且都是数值越大、现实意义越好
❑ 指标的熵值和变异程度
❑ 每个评价对象在各个指标中的比重
• 可理解为统计意义上某种情况出现的概率

❑ 熵值
• 对于第𝑗个指标,其熵值𝑒𝑗为:

❑ 变异系数
• 第𝑗个指标的变异系数: 𝑔𝑗 = 1 − 𝑒𝑗
• 显然熵值越大、变异系数越小,代表该指标越有序,该指标的信息量也就越小
❑ 极端例子
• 假设10个学生每个人的语文成绩都是100
• 如果不经过标准化,直接根据前文公式,计算

• 第1个指标 语文成绩 的熵值:

• 该指标的变异系数:

❑ 意义分析
• 该指标的变异系数为0,代表所有数据都一样,其信息量为0
• 那么该指标毫无用途,在评价体系中去掉该指标,对评价结果不会有影响
• 因此,数据差异越小、熵值越大、变异系数越小、信息量越小
• 极端情况就是数据全相等、无差异,最终求得的变异系数为0
❑权重与评分
❑ 变异系数求权重
• 计算第𝑗个指标的权重:

• 指标的变异系数越大、信息量越大,相应指标的权重也越大
❑ 综合评分
• 计算第𝑖个评价对象的综合评价值

• 该公式对不同科目加权求和,得到每个人的平均值,评价值越大越好
• 𝑝𝑖𝑗和𝑤𝑗都是原始数据(成绩)求得的,完全客观,不掺杂主观成分
❑ 代码求解
❑ 调用数据和公式细节
• 使用熵权法时需要数据全面,有的数据是比赛提供的,有的是需要自己找
• 数据往往以excel文件存储,可在MATLAB中用readmatrix函数调用
• 注意调用的excel文件需要与代码文件在同一文件夹下!!!
调用excel文件数
注意,excel文件要和代码文件放在同一文件夹下,否则需要绝对路径
只读取数值,用range表明取哪些
clc,clear
score=readmatrix('data3-3.xlsx','range','B2:I11');
指标标准化
本题只有正向指标;若有负向指标,同样套用公式即可

注意:后续求对数,自变量不能为0,故为0时取个0.001即可
[n,m]=size(score);
score2=zeros(n,m);
for j=1:m
for i=1:n
score2(i,j)=(score(i,j)-min(score(:,j)))/(max(score(:,j))-min(score(:,j)));
if score2(i,j)==0
score2(i,j)=0.0001; % 求对数不能为0,故取个极小的数
end
end
end
求熵和权重和最终评价排名
套公式即可
p=score2./sum(score2);
e=-sum(p.*log(p))/log(n);
g=1-e;
w=g/sum(g) %计算权重
s=w*p'; %计算各个评价对象的综合评价值
[ss,rank]=sort(s,'descend') %对评价值从大到小排序;descend表示降序
求得的rank中,第一个元素是9,意味着第一名是序号9同学;第二个元素是1,意味着第二名是序号1同学……
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)