数学建模|熵权法|简要原理+Matlab代码实现

1. 核心原理介绍

1.1 熵  \mathop e\nolimits_j \

【衡量某个指标的混乱程度】

(1)信息论中:熵是不确定性的一种度量,可判断一个事件的随机性无序程度

(2)熵值可判断某个指标的离散程度,指标的离散(混乱)程度越大,说明该指标对综合评价的主体影响越大

1.2 变异系数  \mathop g\nolimits_j \

\large \mathop g\nolimits_j = 1 - \mathop e\nolimits_j \

熵与变异系数的关系:

熵值越大,变异系数越小,代表该指标越有序,该指标的信息量越小(越不重要)  


2. 实例建模过程

2.1 实例 

要求:根据下表给出的10个学生8门课的成绩,给出这10个学生评奖学金的评分排序 

2.2 建模过程 

(1)数据预处理【标准化】

标准化原因:

  • 不同指标数量级可能不同
  • 评价体系中,存在正向指标(数值越大越好)and 负向指标(数值越小越好)
  • 变量定义设 \large \mathop x\nolimits_{​{\rm{i}}j} \ 为第i个学生的第j门课程的成绩(注意:本例题中分数都是正向指标)
  • 正向指标标准化:

\large \mathop a\nolimits_{ij} = \frac{​{\mathop x\nolimits_{ij} - \min \left\{ {\mathop x\nolimits_{1j} , \cdots ,\mathop x\nolimits_{nj} } \right\}}}{​{\max \left\{ {\mathop x\nolimits_{1j} , \cdots ,\mathop x\nolimits_{nj} } \right\} - \min \left\{ {\mathop x\nolimits_{1j} , \cdots ,\mathop x\nolimits_{nj} } \right\}}}\

  • 负向指标标准化:

\large \mathop a\nolimits_{ij} = \frac{​{\max \left\{ {\mathop x\nolimits_{1j} , \cdots ,\mathop x\nolimits_{nj} } \right\} - \mathop x\nolimits_{ij} }}{​{\max \left\{ {\mathop x\nolimits_{1j} , \cdots ,\mathop x\nolimits_{nj} } \right\} - \min \left\{ {\mathop x\nolimits_{1j} , \cdots ,\mathop x\nolimits_{nj} } \right\}}}\

【标准化后,\large \mathop a\nolimits_{ij} \in [0,1]\ 】 

(2)确定指标熵值与变异系数

  • 每个评价对象在各个指标中的比重(等价为出现的概率)\large {\mathop p\nolimits_{ij} }\

\large \mathop p\nolimits_{ij} = \frac{​{\mathop a\nolimits_{ij} }}{​{\sum\limits_{i = 1}^n {\mathop a\nolimits_{ij} } }}\

  • 计算熵值 \large \mathop e\nolimits_j \

\large \mathop e\nolimits_j = - \frac{​{\sum\limits_{i = 1}^n {\mathop p\nolimits_{ij} } \ln \left( {\mathop p\nolimits_{ij} } \right)}}{​{\ln (n)}}\

  •  计算变异系数 \large \mathop g\nolimits_j \

\large \mathop g\nolimits_j = 1 - \mathop e\nolimits_j \

(3)确定权重 与 综合评分

  • 计算变异系数权重 \large \mathop w\nolimits_j \

(计算第j个科目的权重)

指标的变异系数越大,信息量越大,相应的科目成绩的权重也越大

\large \mathop w\nolimits_j = \frac{​{\mathop g\nolimits_j }}{​{\sum\limits_{i = 1}^m {\mathop g\nolimits_j } }}\

  • 计算综合评分 \large \mathop s\nolimits_i \

(计算第i个学生的综合得分)

对不同科目加权求和,得到每个人的评价得分,得分越大越好

注意\large {\mathop p\nolimits_{ij} }\\large \mathop w\nolimits_j \都是根据原始数据求得,完全客观

\large \mathop s\nolimits_i = \sum\limits_j^m {\mathop w\nolimits_j \mathop p\nolimits_{ij} } \


3. Matlab实现 

3.1 代码

(1)指标标准化

%初始化一个对应大小的标准化矩阵
x2 = zeros(n,m);

for j=1:1:m
    for i = 1:1:n
        x2(i,j) = (x(i,j)-min(x(:,j)))/(max(x(:,j))-min(x(:,j)));
        if(x2(i,j)==0)
            x2(i,j)=0.001;% 求对数不能为0,故取个极小的数
        end
    end
end

 (2)求熵和变异系数

%求每个评价对象在各个指标的比重
p=x2./sum(x2);%sum函数默认是求每一列的

%求熵值
e = -( sum(p .* log(p)) )/log(n);

%求变异系数
g = 1 - e;

(3)计算权重并求解综合评价 

%计算权重
w = g ./ sum(g);

%计算每个评价对象的综合评价值
s_ = (p * w')';

%降序排序
[ss,rank] = sort(s_,'descend');%对评价值从大到小排序;descend表示降序

3.2 结果展示

从变量rank中我们可得学生综合评分的排名:

排名 1 2 3 4 5 6 7 8 9 10
学生编号 9 1 3 6 7 5 10 4 8 2

4. 总结 

评价类别有很多方法:熵权法、AHP、TOPSIS......

熵权法与其他最大的区别:熵权法追求“完全公正”即完全客观,是根据数据本身建立的评价体系

缺点:难以将数据之外的因素考虑进去

猜你喜欢

转载自blog.csdn.net/zzztutu/article/details/127008993