(2)评价算法-TOPSIS算法
文章目录
- 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算法相关推荐
- TOPSIS算法及代码
TOPSIS的全称是"逼近于理想值的排序方法" 根据多项指标.对多个方案进行比较选择的分析方法,这种方法的中心思想在于首先确定各项指标的正理想值和负理想值,所谓正理想值是一设想的最 ...
- TOPSIS算法(优劣解距离法)的使用举例与matlab实现
文章目录 一.算法的提出 二.TOPSIS算法的一般步骤 1.形成决策矩阵 2.计算加权决策矩阵 (1)指标正向化处理 a.极大值指标正向化 b.极小型指标极大正向化 c.中间型指标极大正向化 d.区 ...
- topsis法matlab程序,TOPSIS算法(示例代码)
title: TOPSIS算法 date: 2020-02-24 11:18:06 categories: 数学建模 tags: [评价模型, MATLAB] mathjax: true 定义 ? C ...
- TOPSIS算法与熵权法
TOPSIS算法 英文全称Technique for Order Preference by Similarity to Ideal Solution,翻译为逼近理想解排序法.使用层次分析法进行评价时 ...
- Topsis算法(优劣解距离法)——综合评价方法
一.Topsis算法 TOPSIS 法是一种常用的组内综合评价方法,能充分利用原始数据的信息,其结果能精确地反映各评价方案之间的差距.基本过程为基于归一化后的原始数据矩阵,采用余弦法找出有限方案中的最 ...
- 二、【绪论】算法和算法评价
算法和算法评价 1 算法的基本概念 算法(Algorithm)是对特定问题求解步骤的一种描述,它是指令的有限序列,其中的每条指令表示一个或多个操作.一般具有下列5个重要特性: 有穷性:一个算法必须在执 ...
- 【数据结构】之算法和算法评价
1.2算法和算法评价 1.2.1 算法的基本概念 算法(Algorithm〉是对特定问题求解步骤的一种描述,它是指令的有限序列,其中的每条指令表示一个或多个操作.此外,一个算法还具有下列5个重要特性: ...
- 评价一个学习算法(斯坦福machine learning week 6)
1. 评价一个学习算法 1.1 如何少走弯路? 1.2 机器学习诊断法引入 1.2.1 背景 当我们确定学习算法的参数的时候,我们考虑的是选择参量来使训练误差最小化.有人认为,得到一个非常小的训练误差 ...
- 算法:算法概述【时间复杂度、空间复杂度】
一.算法定义 算法:为了实现业务目的的各种方法和思路就是算法.同样的数据,同样的目的, 不同的算法,不同的方法和思路,效率就会不同 算法是一种独立的存在 , 它并不依附于代码 , 代码只是实现算法思想 ...
- 新手如何学习算法?算法如何入门以及零基础入门算法应该学些什么?
搬运工,看到一篇关于算法学习之路的总结,希望对你有帮助. 原文链接:zh.lucida.me/blog/on-le 我的算法学习之路 MAY 4TH, 2014 | COMMENTS 关于 严格来说 ...
最新文章
- [转] 2016前端开发技术巡礼
- bzoj2067: [Poi2004]SZN
- C语言中动态数组的作用,C语言实现动态数组
- 【12】 全国外电音DJ 3000首 32G
- stm32 复位到内部bootloader
- php signature解密,openssl RSA非对称加密、解密、签名、验签
- [蓝桥杯2019初赛]迷宫-DFS、BFS两种方法
- 处理局域网网速变慢问题的几个思路
- java实现log4j_log4j在java中实现
- python如何实现模拟登录_超详细的Python实现新浪微博模拟登陆(小白都能懂)
- 03 CSS听课笔记
- eclipse-阶段三-Server被关闭后消失,如何打开
- 一种视频录制时,类似监控视频中加入动态时间标记的装置
- C/C++[codeup 2063]日期累加
- 汇编语言王爽实验17
- 记一次被200G流量 DDOS攻击的处理经验
- Jpg格式如何变成gif动图?仅需三步快速合成gif
- CAJ格式文件怎么转换为PDF格式
- zookeeper原理:分布式协同技术
- 怎么在计算机关闭文件夹隐藏,电脑文件夹名、文件夹怎么隐藏?