文章目录

  • 1、TOPSIS算法
  • 2、TOPSIS算法流程
    • 2.1、极大型转化
    • 2.1.1 极大型
    • 2.1.2 中间型
    • 2.1.3 极小型
    • 2.1.4 区间型
  • 2.2 计算每项指标的权重
  • 2.3 正向矩阵标准化
  • 2.4 计算得分
  • 3、实例
  • 4、参考资料

1、TOPSIS算法

TOPSIS方法是基于数据对样本进行排序的一种方法,其基本思想是根据样本数据构造一个理想化的目标。主要找到每一列(指标)的最大值让它们构成一个向量Z+Z^+Z+和每一列(指标)的最小值构成一个向量Z−Z^-Z−。只要找到这两个向量,后面的事情就好办了。

2、TOPSIS算法流程

2.1、极大型转化

将不同指标转化为极大型指标,指标常见四种类型,极大型,中间型,极小型,范围型。

四种类型的指标处理方法如下

2.1.1 极大型

无需处理

2.1.2 中间型

2.1.3 极小型

2.1.4 区间型

2.2 计算每项指标的权重

本文采用的是熵权法,在我之前的文章有讲,点击这里

2.3 正向矩阵标准化


将标准化以后的矩阵每列都乘以W[i](上一步已经把每一列的权重都算出来了)。

2.4 计算得分

3、实例

注:这里使用的是2021年华数杯C题附件一数据

import numpy as np
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
import math# 极小型指标 -> 极大型指标
def dataDirection_1(datas):return np.max(datas) - datas  # 套公式# 中间型指标 -> 极大型指标
def dataDirection_2(datas, x_best):temp_datas = datas - x_bestM = np.max(abs(temp_datas))answer_datas = 1 - abs(datas - x_best) / M  # 套公式return answer_datas# 区间型指标 -> 极大型指标
def dataDirection_3(datas, x_min, x_max):M = max(x_min - np.min(datas), np.max(datas) - x_max)answer_list = []for i in datas:if (i < x_min):answer_list.append(1 - (x_min - i) / M)  # 套公式elif (x_min <= i <= x_max):answer_list.append(1)else:answer_list.append(1 - (i - x_max) / M)return np.array(answer_list)# 正向化矩阵标准化
def Scaler(datas,weight):K = pow(np.sum(pow(datas,2),axis=1),0.5)print(K)for i in range(datas.shape[1]):for j in range(0, datas[i].size):datas[i, j] = datas[i, j] / K[i]  # 套用矩阵标准化的公式for i in range(datas.shape[1]):datas[i] = datas[i]*weight[i]return datasdef Score(datas):list_max = []for i in range(datas.shape[1]):list_max.append(np.max(datas[:,i]))list_min = []for i in range(datas.shape[1]):list_min.append(np.min(datas[:, i]))max_list = []  # 存放第i个评价对象与最大值的距离min_list = []  # 存放第i个评价对象与最小值的距离answer_list = []  # 存放评价对象的得分for k in range(datas.shape[0]):max_sum = 0min_sum = 0for q in range(datas.shape[1]):max_sum += pow(datas[k,q]-list_max[q], 2)min_sum += pow(datas[k,q]-list_min[q], 2)max_list.append(pow(max_sum, 0.5))min_list.append(pow(min_sum, 0.5))answer_list.append(min_list[k] / (min_list[k] + max_list[k]))result = np.array(answer_list)return resultdef main():data = pd.read_excel('2.xlsx')data = data.iloc[:,2:10]"""for i in range(data.shape[1]):if 极大型data[i] = data[i]  #或者continueelif 中间型data[i] = dataDirection_2(data[i],mid)elif 极小型data[i] = dataDirection_1(data[i])else 范围型data[i] = dataDirection_3(data[i],min,max)"""After_Large = np.array(data)# 计算每个元素的权重weight = cal_weight(data)After_Scaler = Scaler(After_Large,weight)Final_Score = Score(After_Scaler)data = pd.DataFrame(Final_Score)writer = pd.ExcelWriter('34.xlsx')data.to_excel(writer,float_format='%.5f')writer.save()writer.close()def cal_weight(x):x = MinMaxScaler().fit_transform(x)# 求krows = x.shape[0]  # 行cols = x.shape[1]  # 列k = 1.0 / math.log(rows)# 矩阵计算--# 信息熵# p=array(p)x = np.array(x)lnf = [[None] * cols for i in range(rows)]lnf = np.array(lnf)for i in range( rows):for j in range(cols):if x[i][j] == 0:lnfij = 0.0else:p = x[i][j] / x.sum(axis=0)[j]lnfij = math.log(p) * p * (-k)lnf[i][j] = lnfijlnf = pd.DataFrame(lnf)E = lnf# 计算冗余度d = 1 - E.sum(axis=0)# 计算各指标的权重w = np.zeros((x.shape[1]))for j in range(cols):wj = d[j] / sum(d)w[j] = wj# 计算各样本的综合得分,用最原始的数据return np.array(w)if __name__ == '__main__':main()

注:TOPSIS对异常值比较敏感,使用TOPSIS算法之前一定要去除异常值

4、参考资料

https://blog.csdn.net/weixin_41799019/article/details/97611462#commentBox

(2)评价算法-TOPSIS算法相关推荐

  1. TOPSIS算法及代码

    TOPSIS的全称是"逼近于理想值的排序方法" 根据多项指标.对多个方案进行比较选择的分析方法,这种方法的中心思想在于首先确定各项指标的正理想值和负理想值,所谓正理想值是一设想的最 ...

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

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

  3. topsis法matlab程序,TOPSIS算法(示例代码)

    title: TOPSIS算法 date: 2020-02-24 11:18:06 categories: 数学建模 tags: [评价模型, MATLAB] mathjax: true 定义 ? C ...

  4. TOPSIS算法与熵权法

    TOPSIS算法 英文全称Technique for Order Preference by Similarity to Ideal Solution,翻译为逼近理想解排序法.使用层次分析法进行评价时 ...

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

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

  6. 二、【绪论】算法和算法评价

    算法和算法评价 1 算法的基本概念 算法(Algorithm)是对特定问题求解步骤的一种描述,它是指令的有限序列,其中的每条指令表示一个或多个操作.一般具有下列5个重要特性: 有穷性:一个算法必须在执 ...

  7. 【数据结构】之算法和算法评价

    1.2算法和算法评价 1.2.1 算法的基本概念 算法(Algorithm〉是对特定问题求解步骤的一种描述,它是指令的有限序列,其中的每条指令表示一个或多个操作.此外,一个算法还具有下列5个重要特性: ...

  8. 评价一个学习算法(斯坦福machine learning week 6)

    1. 评价一个学习算法 1.1 如何少走弯路? 1.2 机器学习诊断法引入 1.2.1 背景 当我们确定学习算法的参数的时候,我们考虑的是选择参量来使训练误差最小化.有人认为,得到一个非常小的训练误差 ...

  9. 算法:算法概述【时间复杂度、空间复杂度】

    一.算法定义 算法:为了实现业务目的的各种方法和思路就是算法.同样的数据,同样的目的, 不同的算法,不同的方法和思路,效率就会不同 算法是一种独立的存在 , 它并不依附于代码 , 代码只是实现算法思想 ...

  10. 新手如何学习算法?算法如何入门以及零基础入门算法应该学些什么?

    搬运工,看到一篇关于算法学习之路的总结,希望对你有帮助. 原文链接:zh.lucida.me/blog/on-le 我的算法学习之路 MAY 4TH, 2014 | COMMENTS  关于 严格来说 ...

最新文章

  1. [转] 2016前端开发技术巡礼
  2. bzoj2067: [Poi2004]SZN
  3. C语言中动态数组的作用,C语言实现动态数组
  4. 【12】 全国外电音DJ 3000首 32G
  5. stm32 复位到内部bootloader
  6. php signature解密,openssl RSA非对称加密、解密、签名、验签
  7. [蓝桥杯2019初赛]迷宫-DFS、BFS两种方法
  8. 处理局域网网速变慢问题的几个思路
  9. java实现log4j_log4j在java中实现
  10. python如何实现模拟登录_超详细的Python实现新浪微博模拟登陆(小白都能懂)
  11. 03 CSS听课笔记
  12. eclipse-阶段三-Server被关闭后消失,如何打开
  13. 一种视频录制时,类似监控视频中加入动态时间标记的装置
  14. C/C++[codeup 2063]日期累加
  15. 汇编语言王爽实验17
  16. 记一次被200G流量 DDOS攻击的处理经验
  17. Jpg格式如何变成gif动图?仅需三步快速合成gif
  18. CAJ格式文件怎么转换为PDF格式
  19. zookeeper原理:分布式协同技术
  20. 怎么在计算机关闭文件夹隐藏,电脑文件夹名、文件夹怎么隐藏?

热门文章

  1. 【相机标定系列】0415 图像缩放之后相机内参变化,调整图像大小如何影响固有相机矩阵?
  2. 2月20日 梯度下降、三种方式、三种超参数学习率冲量衰减因子、应用举例
  3. 6.1 存储技术介绍
  4. 关于maven项目中的Missing artifact *.jar ...
  5. linux文件系统 - 初始化(一)
  6. andriod 自定义来电界面功能
  7. CMS3.0——初次邂逅express
  8. WINDOWS下简单操作SQLITE3
  9. anroid 滑动浏览
  10. 【操作基本数据类型的流】