前言
在前面的《利用Matlab实现AHP评判模型》一文中,我们有讨论到AHP的一些缺点,例如主观性过强、判断矩阵的填写需要专家填写难以实现以及缺乏数据支撑等。所以在这里我不然而然地就联想到了结合熵权法的TOPSIS算法。接下来本人将陈述我对该算法的理解及看法,并且利用Matlab实现该算法
提示:本文学习数据由“清风老师”提供。
一、思维导图
老样子,我们沿着思维导图学习这一算法。在这里先留个大概印象,我们再一个个往里填叭。
二、TOPSIS
2.1 关于TOPSIS
L.Hwang 和 K.Yoon 于1981年首次提出 TOPSIS (Technique for Order Preference by Similarity to an Ideal Solution)。TOPSIS 法是一种常用的组内综合评价方法,能充分利用原始数据的信息,其结果能精确地反映各评价方案之间的差距。基本过程为基于归一化后的原始数据矩阵,采用余弦法找出有限方案中的最优方案和最劣方案,然后分别计算各评价对象与最优方案和最劣方案间的距离,获得各评价对象与最优方案的相对接近程度,以此作为评价优劣的依据。该方法对数据分布及样本含量没有严格限制,数据计算简单易行。
笔者刚学习这一模型,看这简介的时候就想:“这不比AHP要香?”有原始数据支撑,并且对于样本n种没有严格的限制,如果是AHP,n的取值就得小于15了,大于15,一次性检验就无法正常的进行了。
废话不多说,上数据叭。
eg:评价下表中20条河流的水质情况(其中,含氧量越高越好,河流PH值越接近7越好,细菌总数越少越好,植物性营养物质介于10~20之间最佳)
2.2 正向化处理
判断各组数据的类型,进而对各组数据进行正向化处理,即是将各组数据的判断指标统一为极大型判断指标,以至于我们可以从一方面评判这些数据,一般都是转化为极大型指标。类型有级小型、中间型以及区间型等,相应的处理过程如下:
- 级小型数据转化为极大型数据
相应处理公式:
如数据中的细菌总数便是属于级小型数据,max=54,处理得:
- 中间型数据转化为极大型数据
相应处理公式:
如数据中的PH值,越靠近中间值7越好,即属于中间型指标。对河流PH值这一列数据处理得:
- 区间型数据转化为极大型数据
相应处理公式:
其中M:
如数据中的植物性营养物质量,位于区间[10,20]最佳,即属于中间型数据,同样是按着公式对这一列数据进行正向化处理。
综上,即可得正向化矩阵D:
2.3 进行标椎化处理
然后我们在对正向化矩阵进行标椎化处理,进而得到标椎化矩阵Z。
处理公式如下:
(注意:标椎化的公式是不唯一的,还有其它的标椎化过程。)
即可得到标准矩阵如下:
2.4 对各个目标(决策、方案等)进行评分
- 这一环节包括D+、D-、Wi、Si的计算。
D+即为第i个目标对最大值(第i条河流对最好的“河流标准)的距离,D-为第i个目标对最小值的距离。
即计算公式如下:
其中,
相反,Z+ 则为标椎化矩阵各列的最大值。Wi 则为各个评判指标的权重,通过AHP或者熵权法进行计算。
通过上面的计算,我们即可得到未经过归一化处理的评分 Si:
- 对评分进行归一化处理
故,最终我们可以通过评分的大小来评估这20条河流水质的优劣情况。
三、熵权法
对于权重 Wi 的求解,可以用层次分析法或者熵权法来求解,AHP的方法在《利用Matlab实现AHP评判模型》一文中有详细的讲解,故这里不再加以赘述。这里利用熵权法对河流水质各指标的权重进行评估。
3.1 定义
按照信息论基本原理的解释,信息是系统有序程度的一个度量,熵是系统无序程度的一个度量;根据信息熵的定义,对于某项指标,可以用熵值来判断某个指标的离散程度,其信息熵值越小,指标的离散程度越大, 该指标对综合评价的影响(即权重)就越大,如果某项指标的值全部相等,则该指标在综合评价中不起作用。因此,可利用信息熵这个工具,计算出各个指标的权重,为多指标综合评价提供依据。
3.2 计算步骤
- 检验标准矩阵的非负性
即要求上面所得到的的标准矩阵的全部元素需要是非负数。如果存在小于0的书,这需要对正向化矩阵 D 利用下面公式重新进行标椎化。
- 计算概率矩阵P,
即第j项指标下第i个样本所长的比重。 - 计算信息熵ej
即信息熵的计算公式如下:
通过上面的分析可以得知信息熵越大,信息所含的信息量越小。即该类信息所占权重也会越小。 - 计算权重Wj
首先计算信息效用值:dj = 1- ej,即是未归一化的权重,对信息效用值进行归一化处理即可得到每个指标的权重。
总结
熵权法求权重,相对于AHP求权重,熵权法是从数据本身出发,减少了操作者的主观性影响,但是却不一定合理,可以理解为方差大的指标权重就越大,但是相对于那些变化很小的数据,那方差如果几乎为0,那却不是快要忽略这些数据的影响了。所以说,一种模型合不合理是相对而论的,要具体看数据、使用环境而定。