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

(续上篇文章)层次分析法的局限

上一篇文章中,层次分析法有这样的局限

  1. 评价决策层不能太多;
  2. 数据是已知的的话,便无法使用层次分析法进行精确的分析评价;

因此,为对这些情况做出更为精准的分析,我们可以使用Topsis优劣解距离法。

Topsis优劣解距离法介绍

Topsis优劣解距离法是一种综合评价方法,主要优点是能够充分利用原始数据来进行分析。

主要步骤为:

  1. 将原始数据正向化
  2. 将正向化矩阵进行标准化(消除量纲的影响)
  3. 计算样本数据与最大值、最小值的距离
  4. 根据公式,利用距离计算未归一化的得分
  5. 最后进行排序即可

正向化简介

指标名称指标特点实例
极大型指标数据越大越好成绩、水体氧气含量……
极小型指标数据越小越好细菌含量、水体富营养化程度……
中间型指标数据越靠近一个中间的值越好PH值……
区间型指标数据在一个区间中最好人体体温、水体植物量

在Topsis第一步中,我们需要将数据进行正向化处理,一般的处理模式都是将其他类型指标转化为极大型指标。下面叙述转化方法:

  1. 极小型指标 →\rightarrow 极大型指标
    转化公式为:max−x转化公式为:max-xmaxx同时,如果所有数据都是正数(注意正数不包含0哦~~)也可以使用公式 1x\frac{1}{x}x1,但主要推荐使用 max−xmax-xmaxx 来转化。
    (正向化公式不唯一,如果有更好的公式,欢迎告诉我,我会持续更新hhh)
  2. 中间型指标 →\rightarrow 极大型指标
    中间型指标一般会有一个最佳数值,记为 xbestx_{best}xbest ,设 {xix_ixi} 是中间型指标序列,那么正向化公式为:M=max∣xi−xbest∣xi^=1−∣xi−xbest∣MM = max{|x_i - x_{best}|} \\ \hat{x_i} = 1 - \frac{|x_i - x_{best}|}{M}M=maxxixbestxi^=1Mxixbest例如:对于PH值的正向化(xbest=7,max=3x_{best}=7, max=3xbest=7,max=3)
PHPH(正向化后)
11−63=−11-\frac{6}{3}=-1136=1
61−13=231-\frac{1}{3}=\frac{2}{3}131=32
81−13=231-\frac{1}{3}=\frac{2}{3}131=32
101−33=01-\frac{3}{3}=0133=0
  1. 区间型指标 →\rightarrow 极大型指标
    区间型指标一般也会有一个最佳区间 [a,b][a, b][a,b] ,同样设 {xi}\{x_i\}{xi} 是区间型指标序列,那么正向化公式为:M=max{a−min{xi},max{xi−b}}xi^={1−a−xiM,a<xi,1,a≤xi≤b,1−xi−bM,xi<bM = max\{a-min\{x_i\}, max\{x_i-b\}\} \\ \\ \hat{x_i}=\left\{ \begin{aligned} & 1-\frac{a-x_i}{M}, a<x_i, \\ \\ & 1, a \leq x_i \leq b, \\ \\ & 1-\frac{x_i-b}{M}, x_i<b \end{aligned} \right.M=max{amin{xi},max{xib}}xi^=1Maxi,a<xi,1,axib,1Mxib,xi<b例如对于人体体温的转化:
    a=36,b=37,M=max{36−35.2,38.4−37}=1.4a=36, b=37, M = max\{36-35.2, 38.4-37\}=1.4a=36,b=37,M=max{3635.2,38.437}=1.4
体温提问(正向化后)
35.20.4286
35.80.8571
36.61
37.10.9286
37.80.4286
38.40

下面来看一个具体的例子

  1. 原始数据为:
姓名成绩过失次数竞赛次数总和
小明892250
小刚600460
小张741670
小李993880

由原始数据可知,成绩指标为极大型指标,过失次数为极小型指标,竞赛次数为区间型指标,总和为中间型指标。

根据上面描述的方法可以得到正向化矩阵为:X=[89100.56031174210.599000]X= \begin{bmatrix} 89 & 1 & 0 & 0.5 \\ 60 & 3 & 1 & 1 \\ 74 & 2 & 1 & 0.5 \\ 99 & 0 & 0 & 0\\ \end{bmatrix}X=89607499132001100.510.502. 将正向化的矩阵进行标准化去除量纲的影响
标准化公式为:zij=xij∑i=1nx02(每一个元素/其所在列的元素的平方和)标准化公式为:z_{ij} = \frac{x_{ij}}{\sqrt{\sum_{i=1}^n x_0^2}}(每一个元素 / \sqrt{\text{其所在列的元素的平方和}})zij=i=1nx02xij(/其所在列的元素的平方和) S=[0.54370.267300.40820.36650.80180.70710.81650.45200.53450.70710.40820.6048000]S=\begin{bmatrix} 0.5437 & 0.2673 & 0 & 0.4082 \\ 0.3665 & 0.8018 & 0.7071 & 0.8165 \\ 0.4520 & 0.5345 & 0.7071 & 0.4082 \\ 0.6048 & 0 & 0 & 0\\ \end{bmatrix}S=0.54370.36650.45200.60480.26730.80180.5345000.70710.707100.40820.81650.40820
3. 将标准化矩阵进行归一化

  • 求解样本数据与最大值和最小值的距离

定义最大值 Z+=(max{z11,z21,⋯,zn1},max{z12,z22,⋯,zn2},⋯,max{z1m,z2m,⋯,znm})Z^+ = (max\{z_{11}, z_{21}, \cdots, z_{n1}\}, max\{z_{12}, z_{22}, \cdots, z_{n2}\}, \cdots, max\{z_{1m}, z_{2m}, \cdots, z_{nm}\})Z+=(max{z11,z21,,zn1},max{z12,z22,,zn2},,max{z1m,z2m,,znm})
定义最小值 Z−=(min{z11,z21},⋯,zn1},min{z12,z22,⋯,zn2},⋯,min{z1m,z2m,⋯,znm})Z^- = (min\{z_{11}, z_{21}\}, \cdots, z_{n1}\}, min\{z_{12}, z_{22}, \cdots, z_{n2}\}, \cdots, min\{z_{1m}, z_{2m}, \cdots, z_{nm}\})Z=(min{z11,z21},,zn1},min{z12,z22,,zn2},,min{z1m,z2m,,znm})

因此,第i(i=1,2,⋯,n)i(i=1, 2, \cdots, n)i(i=1,2,,n)个评价对象与最大值的距离Di+=∑j=1m(Zj+−zij)2D_i^+ = \sqrt{\sum_{j=1}^{m}(Z_j^+-z_{ij})^2}Di+=j=1m(Zj+zij)2
i(i=1,2,⋯,n)i(i=1, 2, \cdots, n)i(i=1,2,,n)个评价对象与最小值的距离Di−=∑j=1m(Zj−−zij)2D_i^- = \sqrt{\sum_{j=1}^{m}(Z_j^- - z_{ij})^2}Di=j=1m(Zjzij)2
那么,我们可以计算出第 i(i=1,2,⋯,n)i(i=1, 2, \cdots, n)i(i=1,2,,n) 个评价对象未归一化的得分:Si=Di−Di++Di−S_i = \frac{D_i^-}{D_i^+ + D_i^-}Si=Di++DiDi,即:Stand_X=[0.17310.42400.32790.0751]Stand\_X=\begin{bmatrix} 0.1731\\ 0.4240\\ 0.3279\\ 0.0751\\ \end{bmatrix}Stand_X=0.17310.42400.32790.0751
因此可以得到最终排序结果为:

姓名排序
小刚1
小张2
小明3
小李4

总结:

  1. Topsis优劣距离法的核心在于计算距离z与最小值的距离z与最大值的距离+z与最小值的距离\frac{\text{z与最小值的距离}}{\text{z与最大值的距离+z与最小值的距离}}z与最大值的距离+z与最小值的距离z与最小值的距离
  2. 要区别归一化和标准化,前者是对计算结果计算比例,后者是去除量纲的影响。

模型拓展

Topsis模型还可以加入权重,因此可以将上一篇文章中的层次分析法应用于该模型中。只需要在计算距离时乘以权重即可。具体公式为:Di+=∑j=1mωj(Zj+−zij)2Di−=∑j=1mωj(Zj−−zij)2D_i^+ = \sqrt{\sum_{j=1}^{m}\omega_j(Z_j^+-z_{ij})^2} \\ D_i^- = \sqrt{\sum_{j=1}^{m}\omega_j(Z_j^--z_{ij})^2}Di+=j=1mωj(Zj+zij)2Di=j=1mωj(Zjzij)2(ωj\omega_jωj为权重)

这就是Topsis优劣距离法的步骤。其中的数据处理可以使用MatlabMatlabMatlab编程计算。如果有什么错误的话,烦请告知~~~

有什么建议也请告诉我哦~~~
请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/565141.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

没有bug队——加贝——Python 49,50

49.题目&#xff1a;使用lambda来创建匿名函数。 lambda函数 紧跟的是定义的自变量&#xff0c;因变量等&#xff0c;其后是函数 MAXIMUM lambda x,y : (x > y) * x (x < y) * y MINIMUM lambda x,y : (x > y) * y (x < y) * xif __name__ __main__:a 10…

没有bug队——加贝——Python 51,52

目录 知识点&#xff1a; 51.题目&#xff1a;学习使用按位与 & 。 52.题目&#xff1a;学习使用按位或 | 。 知识点&#xff1a; 运算符描述实例&按位与运算符&#xff1a;参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0(a & b) 输出结果 12 …

数学建模学习笔记(三)——插值算法

插值算法简介 数据分析是在大数据时代下不可获取的一环&#xff0c;合理、全面地分析数据&#xff0c;能够使得决策者在决策时作出最为明智的决定。在数据分析过程中&#xff0c;常常可以使用插值算法来根据已知的数据估算出未知的数据&#xff0c;从而模拟产生一些新的值来满…

没有bug队——加贝——Python 53,54

目录 53.题目&#xff1a;学习使用按位异或 ^ 。 54.题目&#xff1a;取一个整数a从右端开始的4〜7位。 运算符描述实例&按位与运算符&#xff1a;参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0(a & b) 输出结果 12 &#xff0c;二进制解释&#xf…

数学建模学习笔记(四)——拟合算法

文章目录拟合算法简介一个线性规划的例子最小二乘法求解最小二乘法拟合检验总结拟合算法简介 与插值算法不同&#xff0c;拟合算法的目的是得到一条确定的曲线&#xff1b;而插值是根据已有的数据来获得一系列新的“靠谱”的数据。插值要求曲线必须全部经过样本数据点&#xf…

没有bug队——加贝——Python 55,56

55.题目&#xff1a;学习使用按位取反~。 说明&#xff1a; 二进制数在内存中以补码的形式存储。 按位取反&#xff1a;二进制每一位取反&#xff0c;0 变 1&#xff0c;1 变 0。 最高位为符号位&#xff0c;正数的符号位为 0&#xff0c;负数为 1。 对正数来说&#xff0…

数学建模学习笔记(五)——相关系数以及假设检验

文章目录皮尔逊相关系数假设检验下面来看一个例子斯皮尔曼(spearman)相关系数注意皮尔逊相关系数 总体皮尔逊&#xff08;Pearson&#xff09;相关系数 如果有 A:{A1,A2,⋯,An}A:\{A_1, A_2, \cdots, A_n\}A:{A1​,A2​,⋯,An​} 和 Y:{Y1,Y2,⋯,Yn}Y:\{Y_1, Y_2, \cdots, Y_n\…

没有bug队——加贝——Python 57,58

相关 tkinter 的介绍&#xff1a;Python 55&#xff0c;56 目录 57.题目&#xff1a;画图&#xff0c;学用line画直线。 58.题目&#xff1a;画图&#xff0c;学用rectangle画方形。   57.题目&#xff1a;画图&#xff0c;学用line画直线。 #57 from tkinter import *c…

C语言高级输出及进阶

在C语言中&#xff0c;有三个函数可以用来在显示器上输出数据&#xff0c;它们分别是&#xff1a; puts()&#xff1a;只能输出字符串&#xff0c;并且输出结束后会自动换行。putchar()&#xff1a;只能输出单个字符。printf()&#xff1a;可以输出各种类型的数据。printf() 是…

数学建模学习笔记(六)——多元线性回归分析

文章目录一、综述二、常见的回归分析三、对于相关性的理解四、一元线性回归模型五、对于回归系数的解释六、内生性七、四类线性模型回归系数的解释八、对于定性变量的处理——虚拟变量XXX九、下面来看一个实例十、扰动项需要满足的条件十一、异方差十二、多重共线性十三、逐步回…

没有bug队——加贝——Python 59,60

相关 tkinter 的介绍&#xff1a;Python 55&#xff0c;56 目录 59.题目&#xff1a;画图&#xff0c;综合例子。  60.题目&#xff1a;计算字符串长度。  len&#xff08;&#xff09;函数用法 59.题目&#xff1a;画图&#xff0c;综合例子。   程序分析&#xff…

爬虫必备反爬技能:使用动态ip

目录 一、为什么要使用动态代理ip? 二、如何申请动态代理ip&#xff1f; 三、如何使用动态ip&#xff1f; 一、为什么要使用动态代理ip? 使用它的好处在哪里呢&#xff1f; 保护你的网络免受外部攻击屏蔽你的IP地址限制不必要的内容更好的帮助你抓取网络数据绕过目标网站…

数学建模学习笔记(七)——图论最短路问题

文章目录一、综述二、图论最短路问题三、几个简单的作图方法四、Dijkstra&#xff08;迪杰斯特拉&#xff09;算法五、Bellman-Ford算法六、总结一、综述 本文主要根据图论的基本概念&#xff0c;介绍图论中常见的建模问题——最短路问题。同时&#xff0c;介绍了解决图论最短…

pycharm和pythonIDE安装详解

目录 一、pycharm下载安装 二、python下载安装 ​三、pycharm上配置python 我们可能显示的库不大一样&#xff0c;因为我这大都事先安装过了&#xff0c;就没有删​打印成功&#xff1a;标志配置完成​四、配置镜像源让你下载嗖嗖的快 4.1&#xff09;pycharm内部配置 4.2…

数学建模学习笔记(八)——分类模型

文章目录一、分类模型综述二、逻辑回归三、两点分布&#xff08;伯努利分布&#xff09;四、连接函数的取法五、Logistic回归模型六、在SPSS中进行二元Logistic回归七、预测结果较差的解决八、Fisher线性判别分析九、多分类问题十、总结一、分类模型综述 通过样本数据中的分类…

python基础入门(1)

目录 一、python入门 二、python缩进 三、Python注释 1&#xff09;单行注释 2&#xff09;多行注释 四、Python 变量 1&#xff09;变量定义理解 2&#xff09; 变量名命名 3&#xff09; 分配多个值 4&#xff09;输出变量 5&#xff09;全局变量与局部变量&#…

数学建模学习笔记(九)——聚类模型

文章目录一、聚类综述二、主要用到的聚类算法三、K-means聚类算法四、K-means算法五、对于K-means算法和K-means算法的讨论六、系统&#xff08;层次&#xff09;聚类算法七、DBSCAN算法八、总结一、聚类综述 聚类的主要目的就是将样本划分为由类似的对象组成的多个类的过程。…

python基础入门(2)

目录 一、Python数据类型 1&#xff09;置数据类型 2&#xff09;获取数据类型 3&#xff09;设置数据类型 4&#xff09;设置特定数据类型 6&#xff09;练习题 二、python数字- 1&#xff09;整数 2&#xff09;浮点数 3&#xff09;虚数 4&#xff09;类型转换 …

C语言scanf:获取输入的内容

获取外部输入数据内容 在C语言中&#xff0c;有多个函数可以从键盘获得用户输入&#xff1a; scanf()&#xff1a;和 printf() 类似&#xff0c;scanf() 可以输入多种类型的数据。getchar()、getche()、getch()&#xff1a;这三个函数都用于输入单个字符。gets()&#xff1a;获…

数学建模学习笔记(十)——时间序列模型

文章目录一、时间序列综述二、时间序列数据以及基本概念三、时间序列分解四、指数平滑模型五、一元时间序列分析的模型六、AR&#xff08;p&#xff09;模型七、MA&#xff08;q&#xff09;模型八、ARMA&#xff08;p, q&#xff09;模型九、模型选择&#xff1a;AIC 和 BIC 准…