数学建模——熵权法步骤及程序详解
权重的求解一直都是数学建模的重点关注对象,所以学好建模论文的重要一步就是如何确定权重,今天是来介绍一种客观确定几个指标各自所占的权重的方法——熵权法。之前的数学建模实战里有提到用熵权法确定了每个指标各自的权重,这里展开详细的写一下。
文章目录
- 数学建模——熵权法步骤及程序详解
- 前言
- 一、熵权法的介绍
- 1、熵权法的应用场景
- 2、熵权法的基本思想
- 3、熵权法的算法步骤
- 二、代码程序
- 总结
前言
按照信息论基本原理的解释,信息是系统有序程度的一个度量,熵是系统无序程度的一个度量;根据信息熵的定义,对于某项指标,可以用熵值来判断某个指标的离散程度,其信息熵值越小,指标的离散程度越大, 该指标对综合评价的影响(即权重)就越大,如果某项指标的值全部相等,则该指标在综合评价中不起作用。因此,可利用信息熵这个工具,计算出各个指标的权重,为多指标综合评价提供依据。
一、熵权法的介绍
我们分析某个因素时,主观地列出了一些有影响力的指标,这些指标已经与因变量存在某种的相关性,不管是正相关还是负相关。指标的值变化会直接影响因素的变化,变化量越大,说明指标对于因素的变化作用也应该是越明显的。
简单的讲,就是在评价对象时,往往每个对象会有几个指标。那这几个指标哪个指标所占的权重最大呢?我们自己捏造一个好像又不太合理,所以我们瞎分析一下,好像一些变化不是那么大,整体相对平滑的数据,举一个极端的例子:对于所有的样本而言,这个指标都是相同的数值,那么我们可认为这个指标的权值为0,即这个指标对于我们的评价起不到任何帮助。依据这种思想我们就诞生了熵权法。
1、熵权法的应用场景
熵权法既然是客观赋权法,那么应用有一个前提条件,那就是必须得有数据,没有数据支撑的赋权方法是主观赋权法。
这种方法虽然简单,但是用于企业的实际问题当中是非常有用的,可以用于确定初步权重,后续可通过其他方法进行优化。
2、熵权法的基本思想
我们对于一件事情的普遍看法是,越有可能发生的事情,信息量越少;越不可能发生的事情,信息量就越多。而熵的定义我们在高中化学中已经接触过了,有兴趣的同学可以回顾一下,熵的定义是系统的混乱程度,熵越高,系统的状态越混乱,这个定义就很符合我们对事情的普遍看法的定义,所以诞生了名词——信息熵。
一个随机变量的信息熵越高,则他所带来的信息量越高,那么相对应的,其他变量的信息量会比较低(因为总体信息量(权重)是固定的,为1)
啊,说到这里,大家不是很理解也很正常滴,主要写论文会用,会抄就可以了。下面进入重点,
3、熵权法的算法步骤
第一步为数据标准化。
首先需要正向化指标(后续需要用到),当然,如果数据都是非负的,那么可以跳过正向化步骤,公式如下。
就是指标的值减去最小值,除以指标的振幅。这样子就可以得到正向化后的矩阵Z。
第二步为进行归一化处理
处理公式如下。
y ij = z ij / ∑ i=1n x ij y_{ij}=z_{ij}/\sum_{i=1}^{n}{x_{ij}} yij=zij/i=1∑nxij
此外还可以采用最大最小法、Z-score等方法进行标准化处理。由此可得到行列的标准化矩阵(共有n行m列,一行代表一个样本,一列代表一个指标)
Y=( y ij) nm Y=(y_{ij})_{nm} Y=(yij)nm
第三步计算每个指标的信息熵,并计算信息效用值,并归一化得到每个指标
公式如下:
e j=k ∑ i=1n y i jln y i j e_j=k\sum_{i=1}^n{y_{ij}\ln y_{ij}} ej=ki=1∑nyijlnyij
这里为什么要除以一个常数 kkk呢? kkk的取值是为了保证 ej e_jej可以在区间[0,1]上,当指标的样本值完全一样的时候,k= 1 ln n \frac{1}{\ln\text{\ }n}lnn1刚好可以令信息熵位于[0,1]之间,所以我们 kkk值一般取 1 ln n \frac{1}{\ln\text{\ }n}lnn1
熵值越小,信息量越大,有兴趣大家可以试一下画他的函数图像。
第四步计算信息效用值(信息熵冗余度)
计算方法如下:
d j=1− e jd_j=1-e_j dj=1−ej
信息效用越大,信息量越大。
第五步计算指标的权重系数
将信息效用值进行归一化,就可以得到每个指标的权重:
w j= d j/ ∑ i=1m d iw_j=d_j/\sum_{i=1}^m{d_i} wj=dj/i=1∑mdi
二、代码程序
matlab代码如下:
clc,clear%行为样本,列为指标X=[3941428233487744562203660332293493692991414922981154934191152242352623862908396107556310306641780298119644227438873730322143071596694110483510101461936326781070793036985134788833956253010899092208620772160360631243593326116897378318410226691179111785111231092349389511401673900130355261203418035381991111642911005102446403241615233989153722444755430937271593878466880226263743211177681466916716142226746306629186710480531003952290447116124969441611141528639938295665259111423951112661309249406146015320012999722869553084911250612023651112475325251119];[n,m]=size(X);%% 正向化z=find(X<=0);if length(z)~=0for i=1:nfor j=1:m x(i,j)=(X(i,j)-min(X(:,j)))/(max(X(:,j))-min(X(:,j)));endendX=x;end%% 归一化for i=1:nfor j=1:mp(i,j)=(X(i,j)+0.00000000001)/sum(X(:,j));%这里加极其小的数,是为了防止后面当p为0的时候log(p)无法计算endend%% 计算第 j 个指标的熵值 e(j)k=1/log(n);for j=1:me(j)=-k*sum(p(:,j).*log(p(:,j)));endd=ones(1,m)-e; % 计算信息熵冗余度w=d./sum(d) % 求权值 w
总结
熵权法本质
其实可以看成是方差越大,我们赋予的权重也就越大。
熵权法的讨论
在实际过程操作中,熵权法本身也是具有一定的逻辑问题,例如信息熵小的数值不一定对于因素的影响就小,举个典型的例子,在大学期末综评的时候,参加比赛是可以加分的,发表论文是可以获得加分的,在参加比赛方面大家各有差异,而发表论文的加分项大家几乎都没有,那我们可以说期末综评发表论文没有参加比赛重要吗,显然是不科学的,所以熵权法本身也具有一定的约束性,这是客观赋权法不可避免的。
熵权法的拓展
很多时候我们使用熵权法都是为了做一个综合评价,最经典就是基于熵权法对Topsis模型的修改,当然也有简单暴力是熵值法,权重直接乘以归一化后的原始矩阵即可。