R语言:TOPSIS综合评价法进行多属性最优方案选择

Python017

R语言:TOPSIS综合评价法进行多属性最优方案选择,第1张

一般地, TOPSIS综合评价法 主要包含两个步骤:计算权重和计算相对接近度。如需详细了解 TOPSIS综合评价法 的原理和方法,请自行百度,网上有许多非常详尽的原理说明和案例讲解。

根据熵权法确定各个指标的权重;计算各指标信息熵,指标的信息熵越小,则该指标表达信息的不确定性小,在综合评价中对决策的帮助更大,即应该有较大的权重。熵权法是一种客观的赋予权重的方法,它通过各个指标所提供的信息不确定性来确定各指标的权重

根据权重加权规范化指标属性矩阵后,确定正理想方案Amax和负理想方案 Amin,计算各备选方案与Amax 、Amin的距离,以评估与正负理想方案的接近程度,根据相对接近度确定优先次序。其中计算距离一般使用欧式距离。

按照惯例,导入需要使用的包 data.table 、 plyr 。然后载入使用的数据,我们简单看一下案例数据情况。

其中的字段target即为目标字段,我们需要对其含有的8个方案(A~H)进行综合评价排序,选择其中的最优方案。该数据集中的指标均为正向指标。正向指标表示指标的数值越高越好,负向指标则表示指标的数值越低越好,这决定了该指标在进行权重计算时的处理方式。

计算权重的第一步是计算各个指标的熵值,由于我们用到的指标均是正向指标,所以选择自定义函数 entropy_positive 即可。如果指标既存在正向指标又存在负向指标,则可分开进行计算。自定义函数情况如下:

调用函数并完成权重的计算,x1~x8的权重依次为:11.10%、6.61%、28.19%、7.08%、11.88%、8.11%、11.94%、15.09%,计算过程如下:

在将指标向量规范化后,利用熵值法得到的权重计算得到加权标准化矩阵,然后提取正理想方案和负理想方案并计算出各个方案距离正负理想方案的距离,最终根据计算得到距离比值进行排序。具体计算过程如下:

至此,我们就完成了用 TOPSIS综合评价法 进行多对象多指标的最优对象选择,输出的结果如下,显然在这八个方案中,方案A为最优方案。

(1)定义每一个观测值为一类;

(2)计算每一类和其它各类的距离;

(3)把“距离”最短的两类合并成一类,这样类的个数就减少一个;

(4)重复步骤1和步骤2,直到包含所有观测值的类合并成单个类为止。

基于5种营养标准含量(变量)的27种食物(观测)进行层次聚类分析,探索不同食物的相同点与不同点,并分成有意义的类。此处层次聚类算法以平均联动(average)为例。

(1)数据预处理--归一化

(2)计算欧几里得距离

(3)平均联动层次聚类分析

(1)确定聚类个数

NbClust包提供了众多的指数来确定在一个聚类分析里类的最佳数目。

(2)获取最终的聚类方案

由上图,尝试解释每类变量的含义:

K均值聚类为最常见的划分方法。

(1)选择K个中心点(随机选择K个观测),K数值就是我们预期的聚类数。

(2)把每个数据点分配给离它最近的中心点;第一次中心点是随机选择的,但也可以设置参数,选择最优的初始值。

(3)重新计算每类中的点到该类中心点距离的平均值;此时的中心点应该为每一类的均值中心点,对异常值敏感(之后都是如此)

(4)分配每个数据到它最近的中心点;

(5)重复步骤3、4,直到所有的观测值不在被分配或是达到最大的迭代次数(默认10次)

(1)数据预处理:去除第一列干扰数据,并归一化数据。

(2)确定待提取的聚类个数,同样可用NbClust包判断(顺序与层次聚类分析不同,如前所述,层次聚类分析在最后才确定聚类个数)

(3)K均值聚类分析

(4)最后将聚类结果与原始数据标准结果(第一列数据)进行比对,看看分析质量如何。

兰德指数接近0.9,看来K均值聚类算法还不错~

K均值法对均值异常敏感,相比来说,PAM为更稳健的方法。

(1)随机选择K个观测(每个都称为中心点);

(2)计算观测值到各个中心的距离;

(3)把每个观测值分配到最近的中心点;

(4)计算每个中心点到每个观测值的距离的总和(总成本);

(5)选择一个该类中不是中心的点,并和中心点互换;

(6)重新把每个点分配到距它最近的中心点;

(7)再次计算总成本;

(8)若新的总成本比步骤4计算的总成本少,就把新的点作为中心点;

(9)重复步骤5-8,直到中心点不变。