TOPSIS法——利用原始数据进行综合评价

TOPSIS(Technique for Order Preference by Similarity to Ideal Solution)可翻译为逼近理想解排序法,国内常简称为优劣解距离法。TOPSIS法是一种常用的综合评价方法,能充分利用原始数据的信息,其结果能准确地反映各评价方案之间的差距。


举个栗子:

姓名成绩
小明89
小王60
小张74
小周90

    请你为这四名同学成绩进行评分,该评分能合理的描述他们成绩的高低。

    一个很简单的想法:

姓名成绩排名修正后评分
小明89230.3
小王60410.1
小张74320.2
小周90140.4

我们会发现,可以任意修改他们的成绩,只要保证排名不变,那么评分就不会变,显然该评价方式不够合理!

一个比较好的想法:

构造计算评分的公式: (x - min) / (max - min)

姓名成绩未归一化的评分归一化评分
小明89(89 - 60) / (90 - 60) = 0.970.97 / 2.44 = 0.3975
小王60(60 - 60) / (90 - 60) = 00 / 2.44 = 0
小张74(74 - 60) / (90 - 60) = 0.470.47 / 2.44 = 0.1926
小周90(90 - 60) / (90 - 60) = 11 / 2.44 = 0.4098

思考:卷面最高成绩是100,最低成绩是0,为什么不直接用  (x - 0) / (100- 0) 呢 ?

原因:
(1)比较的对象一般要远大于两个;
(2)比较的指标也往往不只是一个方面的,例如成绩、工时数、课外竞赛得分等;
(3)有很多指标不存在理论上的最大值和最小值,例如衡量经济增长水平的指标:GDP增速。
因此,我们构造计算评分的公式为: (x - min) / (max - min).


拓展:我们现增加一个指标,请为他们进行综合评分。

姓名成绩违纪次数
小明892
小王600
小张741
小周903

        成绩是越高越好,我们称这样的指标为极大型指标(效益性指标)。违纪次数越少越好,我们称这样的指标为极小型指标(成本型指标)。
        那么这里我们需要将极小型指标违纪次数转化为极大型指标。

姓名成绩违纪次数正向化后违纪情况
小明8921
小王6003
小张7412
小周9030
指标类型极大型极小型极大型

第一步:统一指标类型
将所有的指标转化为极大型称为指标正向化(最常用).

第二步:标准化处理
成绩的单位是分,而违纪次数单位是次,单位量纲不同,因此需进行处理。
为了消去不同指标量纲的影响,需要对已经正向化的矩阵进行标准化处理。

标准化处理的计算公式

 第三步:计算得分并归一化

姓名成绩正向化后的违纪次数
小明0.54370.2673
小王0.36650.8018
小张0.45200.5345
小周0.60480
指标类型极大型极大型

        当只有一个指标的时候,构造计算评分的公式为:

(x - min) / (max - min)
       
变形得:(x - min) / (max - x)+(x - min)
即:x与最小值距离 / x与最大值距离+x与最小值距离

        那多个指标时呢?

其实我们可以类比只有一个指标计算得分的方法!

        这里我们可得到:
        最大值 [0.6048, 0.8018],最小值 [0.3665, 0]
         计算可得:

        通过该方法,我们可以计算得出每个同学的成绩综合评分,然后对最终评分进行归一化处理,由此我们可得到每个人的最终排名。

        注意:要区别开归一化和标准化。归一化的计算步骤也可以消去量纲的影响,但更多时候,我们进行归一化的目的是为了让我们的结果更容易解释,或者说让我们对结果有一个更加清晰直观的印象。例如将得分归一化后可限制在0—1这个区间,对于区间内的每一个得分,我们很容易的得到其所处的比例位置。

        所以说,TOPSIS法也被称为优劣解距离法。


总结
        TOPSIS法的基本过程为先将原始数据矩阵统一指标类型(一般正向化处理) 得到正向化的矩阵,再对正向化矩阵进行标准化处理以消除各指标量纲的影响,并找到有限方案中的最优方案和最劣方案,然后分别计算各评价对象与最优方案和最劣方案间的距离,获得各评价对象与最优方案的相对接近程度,以此作为评价优劣的依据。该方法对数据分布及样本含量没有严格限制,数据计算简单易行。


拓展
最常见的四种指标:

指标名称指标特点example
极大型(效益性)指标越大(多)越好成绩、GDP增速、利润
极小型(成本型)指标越小(少)越好费用、次品率、污染程度
中间型指标越接近某个值越好水质评估时的pH值
区间型指标落在某个区间最好体温、水中植物性营养物量

注意:正向化的公式不唯一,也可以结合自己的数据进行适当的修改。

(1)极小型指标 ----> 极大型指标:max - x  (如果所有元素均为正数,也可用 1/x )
(2)中间型指标 ----> 极大型指标:

(3)区间型指标 ----> 极大型指标:

         此外,在本例中我们没有考虑各项指标权值的影响,默认了各项指标的权重都为1.
         我们可用以下方法加入权重:
        我们也可以先对标准化矩阵中的每个元素计算权重,然后直接用带权重的标准化矩阵来计算得 分,这样得到的结果和上面在计算距离时引入权重得到的结果是几乎相同的。

         那权重怎么来呢?可以用我们之前讲的层次分析法求得。当然,层次分析法的主观性太强了,更推荐大家使用熵权法来进行客观赋值。

  • 14
    点赞
  • 86
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是使用C++实现TOPSIS的代码: ``` #include <iostream> #include <cmath> using namespace std; const int MAXN = 100; const int MAXM = 100; double a[MAXN][MAXM], b[MAXM]; double w[MAXM], maxn[MAXM], minn[MAXM]; double d[MAXN], s[MAXN]; int n, m; void topsis() { // Step 1: Normalize the decision matrix for (int j = 0; j < m; j++) { maxn[j] = 0; minn[j] = 1e9; for (int i = 0; i < n; i++) { maxn[j] = max(maxn[j], a[i][j]); minn[j] = min(minn[j], a[i][j]); } w[j] = 1 / (maxn[j] - minn[j] + 1e-8); for (int i = 0; i < n; i++) { a[i][j] = w[j] * (a[i][j] - minn[j]); } } // Step 2: Calculate the ideal solution and negative ideal solution for (int j = 0; j < m; j++) { maxn[j] = 0; minn[j] = 1e9; for (int i = 0; i < n; i++) { maxn[j] = max(maxn[j], a[i][j]); minn[j] = min(minn[j], a[i][j]); } } // Step 3: Calculate the Euclidean distance between each alternative and the ideal solution for (int i = 0; i < n; i++) { d[i] = 0; for (int j = 0; j < m; j++) { d[i] += (a[i][j] - maxn[j]) * (a[i][j] - maxn[j]); } d[i] = sqrt(d[i]); } // Step 4: Calculate the Euclidean distance between each alternative and the negative ideal solution for (int i = 0; i < n; i++) { s[i] = 0; for (int j = 0; j < m; j++) { s[i] += (a[i][j] - minn[j]) * (a[i][j] - minn[j]); } s[i] = sqrt(s[i]); } // Step 5: Calculate the relative closeness to the ideal solution for (int i = 0; i < n; i++) { b[i] = s[i] / (s[i] + d[i]); } } int main() { cin >> n >> m; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { cin >> a[i][j]; } } topsis(); for (int i = 0; i < n; i++) { cout << b[i] << endl; } return 0; } ``` 其中,`a`为决策矩阵,`w`为权重向量,`maxn`和`minn`分别表示每列的最大值和最小值,`d`为每个样本到理想点的距离,`s`为每个样本到负理想点的距离,`b`为每个样本的相对接近度。首先进行数据标准化,然后计算理想点和负理想点,最后计算每个样本的相对接近度。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值