文章目录

  • TOPSIS法(优劣解距离法)介绍及 python3 实现
  • 1 简述
  • 2 TOPSIS过程
    • 2.1 指标属性同向化,一般选择指标正向化
      • 2.1.1 极小型指标:期望指标值越小越好(如患病率、死亡率等)
      • 2.1.2 中间型指标:期望指标值既不要太大也不要太小,适当取中间值最好(如水质量评估 PH 值)
      • 2.1.3 区间型指标:期望指标的取值最好落在某一个确定的区间最好(如体温)
    • 2.2 构造归一化初始矩阵
    • 2.3 确定最优方案和最劣方案
    • 2.4 计算各评价对象与最优方案、最劣方案的接近程度
    • 2.5 计算各评价对象与最优方案的贴近程度Cj
    • 2.6 根据Ci大小进行排序,给出评价结果
    • 2.7 TOPSIS法算法程序
  • 补充:不同的算法步骤MATLAB版本
    • TOPSIS算法步骤
    • 对应MATLAB程序

TOPSIS法(优劣解距离法)介绍及 python3 实现

转载原文:
https://zhuanlan.zhihu.com/p/37738503

1 简述

C.L.Hwang 和 K.Yoon 于1981年首次提出 TOPSIS (Technique for Order Preference by Similarity to an Ideal Solution)。TOPSIS 法是一种常用的组内综合评价方法,能充分利用原始数据的信息,其结果能精确地反映各评价方案之间的差距。基本过程为基于归一化后的原始数据矩阵,采用余弦法找出有限方案中的最优方案和最劣方案,然后分别计算各评价对象与最优方案和最劣方案间的距离,获得各评价对象与最优方案的相对接近程度,以此作为评价优劣的依据。该方法对数据分布及样本含量没有严格限制,数据计算简单易行。

通俗的例子:小明数学考试 134 分,要怎么知道他的成绩是好还是不好呢?

基于分布的评价方法会观察小明的分数位于班级分数的哪个水平(如前 5%、前 10%),但这种评价方法只能给出一个方向的情况。如班上成绩除了最高分外,其余都是 134 分,那么小明的成绩就是并列的倒数第一,但是正向评价给出的结果是前 5%。
  而 TOPSIS 就是找出班上最高分(假设是 147 分)、最低分(假设是 69 分),然后计算小明的分数和这两个分数之间的差距,从而得到自己分数好坏的一个客观评价。距离最高分越近,那么评价情况越好,距离最低分越近,那么评价情况越糟。

2 TOPSIS过程

网上大部分资料对此部分均有描述,但不少资料与文献原文存在较大偏差、排版较为混乱,并且没有深入思考原理。此部分内容转述外网文献,并加入了笔者自己的理解。

2.1 指标属性同向化,一般选择指标正向化

TOPSIS 法使用距离尺度来度量样本差距,使用距离尺度就需要对指标属性进行同向化处理(若一个维度的数据越大越好,另一个维度的数据越小越好,会造成尺度混乱)。通常采用成本型指标向效益型指标转化(即数值越大评价越高,事实上几乎所有的评价方法都需要进行转化),此外,如果需要使用雷达图进行展示,建议此处将所有数据都变成正数。

2.1.1 极小型指标:期望指标值越小越好(如患病率、死亡率等)


M为指标 x可能取值的最大值

2.1.2 中间型指标:期望指标值既不要太大也不要太小,适当取中间值最好(如水质量评估 PH 值)


其中M为指标 x的可能取值的最大值, m为指标 x 的可能取值的最小值

2.1.3 区间型指标:期望指标的取值最好落在某一个确定的区间最好(如体温)


其中 [a,b] 为指标 x的最佳稳定区间, [a*,b*] 为最大容忍区间

def dataDirection_1(datas, offset=0):def normalization(data):return 1 / (data + offset)return list(map(normalization, datas))def dataDirection_2(datas, x_min, x_max):def normalization(data):if data <= x_min or data >= x_max:return 0elif data > x_min and data < (x_min + x_max) / 2:return 2 * (data - x_min) / (x_max - x_min)elif data < x_max and data >= (x_min + x_max) / 2:return 2 * (x_max - data) / (x_max - x_min)return list(map(normalization, datas))def dataDirection_3(datas, x_min, x_max, x_minimum, x_maximum):def normalization(data):if data >= x_min and data <= x_max:return 1elif data <= x_minimum or data >= x_maximum:return 0elif data > x_max and data < x_maximum:return 1 - (data - x_max) / (x_maximum - x_max)elif data < x_min and data > x_minimum:return 1 - (x_min - data) / (x_min - x_minimum)return list(map(normalization, datas))

2.2 构造归一化初始矩阵

设共有 [公式] 个待评价对象,每个对象都有 [公式] 个指标(属性),则原始数据矩阵构造为:

构造加权规范矩阵,属性进行向量规范化,即每一列元素都除以当前列向量的范数(使用余弦距离度量)

由此得到归一化处理后的标准化矩阵 Z :

2.3 确定最优方案和最劣方案

最优方案Z+由 [Z中每列元素的最大值构成:

最劣方案 Z- 由 Z中每列元素的最小值构成:

2.4 计算各评价对象与最优方案、最劣方案的接近程度


其中 wj为第 j 个属性的权重(重要程度),指标权重建议根据实际确定或使用专家评估方法。在本文第 4 部分也提供了两种常用的确定权重的方法及简要分析。

2.5 计算各评价对象与最优方案的贴近程度Cj


2.6 根据Ci大小进行排序,给出评价结果

2.7 TOPSIS法算法程序

使用的编程语言:python3.7.1 (Anaconda3)

使用的编辑器:Sublime Text 3

使用的模块:pandas、numpy

import pandas as pd
import numpy as npdef topsis(data, weight=None):# 归一化data = data / np.sqrt((data ** 2).sum())# 最优最劣方案Z = pd.DataFrame([data.min(), data.max()], index=['负理想解', '正理想解'])# 距离weight = entropyWeight(data) if weight is None else np.array(weight)Result = data.copy()Result['正理想解'] = np.sqrt(((data - Z.loc['正理想解']) ** 2 * weight).sum(axis=1))Result['负理想解'] = np.sqrt(((data - Z.loc['负理想解']) ** 2 * weight).sum(axis=1))# 综合得分指数Result['综合得分指数'] = Result['负理想解'] / (Result['负理想解'] + Result['正理想解'])Result['排序'] = Result.rank(ascending=False)['综合得分指数']return Result, Z, weight

topsis 函数需要输入:
data:原始数据,pandas.DataFrame 类型
weight:权系数, 默认使用熵权法定权. 也可以传入指定权重列表. (熵权法代码见下文)

补充:不同的算法步骤MATLAB版本

原文链接:https://blog.csdn.net/CSDN___CSDN/article/details/81042527

TOPSIS算法步骤


对应MATLAB程序

说明:有‘%’的地方可灵活变换数值a=[1 2 3;4 5 6;7 8 9];%【】
c=sqrt(sum(a.*a));
for i=1:3%【[ma,na]=size(A);          %ma为A矩阵的行数,na为A矩阵的列数】
for j=1:3%【】
d(i,j)=a(i,j)/c(j)%【d为规范化决策矩阵】
end
end
w=[1 2 3];%【】
for i=1:3%【】
for j=1:3%【】
c(i,j)=d(i,j)*w(j)%【c为加权矩阵】
end
end
cmax=max(c);
cmin=min(c);
for i=1:3%【】
c1=c(i,:)-cmax
s1(i)=norm(c1)
c2=c(i,:)-cmin
s2(i)=norm(c2)
T(i)=s2(i)/(s1(i)+s2(i))
end

TOPSIS法(优劣解距离法)介绍及 python3 实现相关推荐

  1. 基于熵权法优劣解距离法_基于优劣解距离法的火电机组单辅机运行状态评估

    龙源期刊网 http://www.qikan.com.cn 基于优劣解距离法的火电机组单辅机运行状 态评估 作者:王瑾石 来源:<中国化工贸易 · 上旬刊> 2019 年第 01 期 摘要 ...

  2. 基于熵权法优劣解距离法_物流学年学论文参考文献 物流学年专著类参考文献哪里找...

    [100个]物流学年学论文参考文献供您参考,希望能解决毕业生们的物流学年专著类参考文献哪里找相关问题,整理好参考文献那就开始写物流学年论文吧! 一.物流学年论文参考文献范文 [1]浙江省物流立法现状. ...

  3. Topsis算法(优劣解距离法)——综合评价方法

    一.Topsis算法 TOPSIS 法是一种常用的组内综合评价方法,能充分利用原始数据的信息,其结果能精确地反映各评价方案之间的差距.基本过程为基于归一化后的原始数据矩阵,采用余弦法找出有限方案中的最 ...

  4. 基于熵权法优劣解距离法_维普资讯中文期刊服务平台-基于改进TOPSIS方法的航空装备预研项目技术风险评估...

    摘 要:技术风险是引发费用风险和进度风险的主要因素,因此在航空装备的研制中需要重点管控和规避.为提供可靠的航空装备预研项目技术方案的选择依据,采用改进的TOPSIS方法对五种不同航空装备预研方案的技术 ...

  5. TOPSIS(优劣解距离法)【附Python实现代码及可视化代码】

    目录 一.指标正向化 1.极小型指标->极大型指标 2.中间型指标->极大型指标 3.区间型指标->极大型指标 二.标准化处理 三.计算得分并归一化(不带权重) 四.计算得分并归一化 ...

  6. 数学建模学习笔记(二)——Topsis优劣解距离法

    (续上篇文章)层次分析法的局限 上一篇文章中,层次分析法有这样的局限 评价决策层不能太多: 数据是已知的的话,便无法使用层次分析法进行精确的分析评价: 因此,为对这些情况做出更为精准的分析,我们可以使 ...

  7. MATLAB 之 优劣解距离法(TOPSIS )

    文章目录 一.TOPSIS 简介 二.TOPSIS 步骤 1:将原始矩阵正向化,得到正向化矩阵 1.1 指标类型 1.2 正向化公式 2. 正向化矩阵标准化 3. 计算得分并归一化 3.1 方法 3. ...

  8. 数学建模二:TOPSIS法(优劣解距离法) 附代码详解

    数学建模二:TOPSIS法(优劣解距离法)附代码详解 TOPSIS法(优劣解距离法)用于评价类问题. 层次分析法因为受限于一致性检验指标的数量,最多只能选择15个准则或方案.同时层次分析法也难以处理已 ...

  9. TOPSIS算法(优劣解距离法)的使用举例与matlab实现

    文章目录 一.算法的提出 二.TOPSIS算法的一般步骤 1.形成决策矩阵 2.计算加权决策矩阵 (1)指标正向化处理 a.极大值指标正向化 b.极小型指标极大正向化 c.中间型指标极大正向化 d.区 ...

最新文章

  1. xubuntu 19.10安装tensorflow-gpu-2.0(本文很乱,供自己参考)
  2. QML的默认属性default property
  3. redis集群之主从架构
  4. c++用一级运算比较大小_阿里百度腾讯 C/C++ 面试题总结,我全都告诉你!
  5. ucore-lab1-练习5report
  6. video 标签存在的一些坑
  7. 也读《人月神话》:没有银弹的软件工程
  8. 花了一年时间开发出来的基于DXF文件的加工路径自动生成软件
  9. Springboot 集成 Swagger
  10. 作者:王亮(1975-),男,中国科学院自动化研究所研究员,博士生导师
  11. KKGridView
  12. 架构师速成6.4-开发框架
  13. python计数循环,python - Python中的密码求解器循环计数 - SO中文参考 - www.soinside.com...
  14. 一维装箱、二维装箱、三维装箱 区别
  15. 简单典型二阶系统_反馈控制系统的性能
  16. Linux 嗅探 网络扫描 攻击防御神器 NMAP
  17. ITIL服务管理知识体系的介绍
  18. 用Python搭建http文件下载服务器
  19. 免手机验证码网站备案
  20. 网联背后:监管第三方支付究竟有多难?

热门文章

  1. 前端JavaScript框架汇总
  2. pycharm学生认证
  3. 你了解RTK技术吗?—— 揭秘GNSS中的定位技术
  4. highcharts实现立体3D饼状图
  5. 「 Vortex 仿真软件 」 Windows系统安装
  6. 德国精品软件 看图软件介绍 Ashampoo® Photo Commander 12
  7. DPDK KNI介绍
  8. 竟然有如此好用的读Android源码利器
  9. 基于HCPS的智能制造发展理论-转载
  10. 关于MacBook外接HDMI显示_声音输出问题