【数模】TOPSIS法优劣解距离法

TOPSIS的介绍

  • 利用原始数据的信息,其结果能精确地反映各评价方案之间的差距。

  • 层次分析法的局限性

    • 评价的决策层不能太多,否则n很大,判断矩阵和一致矩阵差异可能会很大 (平均随机一致性指标RI的表格中n最多是15)。

TOPSIS步骤

1.将原始矩阵正向化 ( 指标正向化 )

  • 将所有的指标类型统一转化为某个相同的指标。
    • 常用:将所有的指标转化为极大型
  • 注意:正向化的公式不唯一,也可以结合自己的数据进行适当修改
常见的四种指标
  • 极大型指标(效益型指标):越高(大)越好。
    • 如:成绩指标、GDP增速、企业利润
  • 极小型指标(成本型指标):越少(越小)越好
    • 如:费用、坏品率、污染程度
  • 中间型指标:越接近某个值越好
    • 如:水质量评估时的PH值
  • 区间型指标:落在某个区间最好
    • 如:体温、水中植物性营养物量
极小型指标 ⇒ 极大型指标
  • 公式①:max-x(√ 推荐使用)
  • 公式②:1/x(要求所有的元素均为正数)
中间型指标 ⇒ 极大型指标
  • 公式:

-

  • 示例:
    在这里插入图片描述
区间型指标 ⇒ 极大型指标
  • 公式:
    在这里插入图片描述
  • 示例:
    • 36.6属于最佳区间[36,37]内,故正向化转换后数值为1;
    • 其余越接近这个范围,分数越高.
      在这里插入图片描述

2.正向化矩阵标准化

  • 标准化的目的: 消除不同指标量纲的影响。
  • 注意:标准化的方法有很多种,其他例如 (x‐x的均值)/x的标准差
    • 具体选用哪一种标准化的方法在多数情况下并没有很大的限制,这里采用的是前人的论文中用的比较多的一种标准化.
  • 标准化的操作:
    在这里插入图片描述

3.计算得分并归一化

  • 公式:
    在这里插入图片描述

  • 区分归一化和标准化:

    • 归一化的计算步骤也可以消去量纲的影响;
    • 但更多时候,进行归一化的目的是为了让结果更容易解释(或者说让我们对结果有一个更加清晰直观的印象) ⇒ 例如将得分归一化后可限制在0‐1这个区间,对于区间内的每一个得分,能很容易得到其所处的比例位置
  • 不足:没有考虑指标的权重(后面的内容会考虑指标的权重来进行计算)。


具体示例

  • 根据成绩,对四名同学评分,使得评分能合理描述成绩高低。
    • 思路:

      • 在这里插入图片描述

      • 不足:只要保证排名不变,即使修改成绩,评分也不变 ⇒ 即评分无法体现完全的成绩数据信息

      • 优化: 最高成绩max=99;最低成绩min=60; ⇒ 构造计算评分的公式:(x-min)/(max-min)
        在这里插入图片描述

      • 为什么不设置“ 卷面最高成绩 : 100;卷面最低成绩 : 0 ”呢?

        • ①比较的对象一般要远大于两个。(例如比较一个班级的成绩)
        • ②比较的指标也往往不只是一个方面的,例如成绩、工时数、课外竞赛得分等。
        • ③有很多指标不存在理论上的最大值和最小值,例如衡量经济增长水平的指标:GDP增速。
    • 拓展:增加指标个数

      • 如上例中,新增加了一个指标,现在要综合评价四位同学,并为他们进行评分。在这里插入图片描述

      • 【步骤一】 处理评分因素指标不同的方式:统一指标类型。

        • 极小型指标 ⇒ 为极大型指标的公式:max-x
        • 处理后:在这里插入图片描述
        • 但成绩和争吵次数不能简单地相加而论,故要先标准化处理。
      • 【步骤二】 标准化处理:为了消去不同指标量纲的影响,对已经正向化的矩阵进行标准化处理

        • 标准化处理计算公式:在这里插入图片描述
      • 【步骤三】 计算得分:

        • 只有一项指标计算得分:- 仅一项指标时:在这里插入图片描述
        • 有多项指标计算得分:
          • 优劣解距离法:“优”表和最大值的距离;“劣”表和最小值的距离。
            在这里插入图片描述

课后练习题

题目: 评价下表中20条河流的水质情况。

  • 注:含氧量越高越好;PH值越接近7越好;细菌总数越少越好;植物性营养物量介于10‐20之间最佳,超过20或低于10均不好。
  • 在这里插入图片描述

分析

  • 采用代码完成正向化、标准化后的矩阵,由于结果比较大,所以可以把处理后矩阵放入附录
步骤一:指标正向化
  • 由于:
    • 含氧量越高越好:极大型指标(效益型指标)
    • PH值越接近7越好:中间型指标
    • 细菌总数越少越好:极小型指标(成本型指标)
    • 植物性营养物量介于10‐20之间最佳,超过20或低于10均不好:区间型指标
  • 故:第一步先将四个指标全转化为极大型
步骤二:标准化消除量纲

在这里插入图片描述

步骤三:计算得分

模型拓展:带权重指标

  • 上面样例中默认成绩和争吵次数两项指标的权重是相同的:在这里插入图片描述
  • 但有可能成绩占评分权重四成,争吵次数占六成,此时就需要在第三步计算得分中加入权重考虑在这里插入图片描述
  • 权重如何确定呢?
    • 层次分析法(主观性太强了)
    • 熵权法(客观赋值)⇒ 推荐√
      • 熵权法的介绍在番外篇(正课最后一节:基于熵权法对Topsis模型的修正)

附言

  • 参考课程可见 B站清风数模,如上仅作个人学习后笔记整理。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 首先,将图片上的数据手动输入到matlab中,可以用一个20*5的矩阵存储这些数据,其中每行代表一条河流,每列代表不同的指标(含氧量、pH值、细菌总数、植物性营养物量和河流名称)。 然后,根据不同的指标,可以分别计算每条河流的水质等级。例如,对于含氧量和pH值,可以参考国家标准GB3838-2002《环境质量标准》中的相关规定进行评估。对于细菌总数和植物性营养物量,可以参考水质评价方中的相关标准进行评估。 最后,可以将每条河流的水质等级进行综合排名,得出整个样本中水质最好的河流和水质最差的河流。这可以使用matlab中的排序函数实现。 以下是一个简单示例代码: ```matlab % 输入数据 data = [ ... ]; % 20*5的矩阵,每行代表一条河流,每列代表不同的指标 % 计算每条河流的水质等级 oxygen_level_grade = ...; % 计算含氧量水质等级 ph_value_grade = ...; % 计算pH值水质等级 bacterial_count_grade = ...; % 计算细菌总数水质等级 nutrient_level_grade = ...; % 计算植物性营养物量水质等级 % 综合评价每条河流的水质等级 water_quality_grade = (oxygen_level_grade + ph_value_grade + bacterial_count_grade + nutrient_level_grade) / 4; % 按照水质等级进行排序 [sorted_grade, index] = sort(water_quality_grade, 'descend'); % 输出排序结果 for i = 1:20 fprintf('%d. %s: %.2f\n', i, char('A'+index(i)-1), sorted_grade(i)); end ``` 其中,`oxygen_level_grade`、`ph_value_grade`、`bacterial_count_grade`、`nutrient_level_grade`和`water_quality_grade`都是20*1的向量,分别代表不同指标的水质等级和综合水质等级。`sorted_grade`和`index`分别是排序后的水质等级和对应的河流编号,可以用于输出排序结果。 ### 回答2: 要使用MATLAB对这张图片的数据进行分析,首先需要将图片转化为数值数据。可以通过图像处理工具箱中的函数将图片读入到MATLAB环境中,并进行处理,提取出每条河流的含氧量、pH值、细菌总数和植物性营养物量的数值。 在读入图片并提取数据后,可以使用MATLAB的矩阵运算和统计函数来分析这些数据。例如,可以计算每条河流的平均值、中位数、标准差等统计量,以评估水质情况。还可以使用MATLAB的排序函数将河流按照某一指标(如含氧量)进行排序,并给出排序结果。 下面是一个简单的MATLAB代码示例,演示了如何实现上述功能: ``` % 读入图片并提取数据 image = imread('river_data.jpg'); data = extract_data(image); % 自定义函数,用于提取图片中的数据 % 计算每条河流的统计量 mean_data = mean(data); median_data = median(data); std_data = std(data); % 按照含氧量进行排序 oxygen_levels = data(:, 1); % 假设含氧量在第一列 [sorted_oxygen, index] = sort(oxygen_levels); % 输出排序结果 sorted_rivers = char(index + 'A' - 1); % 将河流编号转化为字母 disp(sorted_rivers); % 可以根据实际需求进行进一步分析和可视化操作 ``` 需要注意的是,实际的代码实现可能根据数据的格式和处理需求有所不同。你可能需要使用更复杂的图像处理算来提取数据,或者进行更复杂的数据分析和可视化操作。以上示例代码仅作为一个简单的参考。 ### 回答3: 要使用MATLAB进行数据分析、排序,首先需要将图片中的数据转换为MATLAB可以处理的数据结构,例如矩阵或表格。 首先,可以手动测量图片中每个数据点的位置坐标,并用MATLAB的图像处理工具将图片转换为灰度图像。然后,通过图像处理算,提取每个数据点的像素值。 接下来,将提取得到的像素值转换为实际含义的数据,例如氧量、pH值、细菌总数和植物性营养物量等。根据矩阵的行和列数,确定表格的规格,然后将数据填入表格中。 一旦数据转换完毕,就可以利用MATLAB的统计分析函数对每个指标进行分析。例如,使用均值函数计算每个河流的平均氧量、pH值、细菌总数和植物性营养物量,然后根据得到的平均值进行排名。 排名可以通过将每个河流的平均值进行排序,然后与河流名称进行关联得到。可以使用MATLAB的排序函数,如sort或sortrows,对数据进行排序,再将排序结果与河流名称进行关联。 最后,将排序结果以表格或图形的形式呈现,以便更直观地理和比较不同河流的水质情况。 总之,通过将图片中的数据提取并转换为MATLAB可处理的数据结构,然后利用MATLAB的统计分析函数对水质指标进行分析,并通过排序函数对结果进行排序,最终可以得到20条河流的水质情况并给出排序结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值