Topsis模型小记

一般步骤:

  • 正向化(转化为极大型指标 )
  • 标准化(求cos,去量纲)
  • 计算得分并归一化(欧氏距离综合各个指标)

单个指标分析

​ 缺点在于,只看排名,分数发生巨大变化,但是排名不变时,评分还是不变,于是导致成绩和评分的相关性太弱,如下图:

​ 于是想到,对模型进行优化,使评分与成绩的相关性增强,如下图:

​ 可是,上面的方法在归一化的时候含有0,表示没有分数,但是**事实上最后一名也是有分数的呀!**于是有了下面的一种想法:

​ 这个时候,评分与成绩的数据相关性更加强了,最后一名的评分大于0,说明是有分数的,似乎比上面一种优化更加好,

然而,在很多时候,许多的数据是没有上下限的,例如投资额、GDP增速什么的……(这是最重要的一点!)

​ 而且,最终评分的指标在实际中常常是多个的,而不是只有一个“成绩”,还有其他的指标可能可以起到力挽狂饭的作用,一个小小的0对其影响不大。

​ 更何况,在实际的分析中,常常有许多的数据,在归一化之前,用第二种方法只会影响最大值和最小值这两个对象,当数据比较多的时候,影响较小;

多个指标

指标的类型

一般来说,指标有四种

  • 极大型指标(越大越好)
  • 极小型指标(越小越好)
  • 中间型指标
  • 取间型指标

多个不同类型的指标存在时,我们一般都是把极小值指标转化成极大值指标:

专业的说法是:指标正向化

x = max - x;

成功正向化了极小型,那么对于中间型和区间型该怎么正向化呢?

  • 对于中间型:

M就是某一项和最佳值的差的最大值而不是最大值和最小值的差!!

  • 对于区间型:(例如人的体温)

  1. 当落在区间之内的时候,就是1
  2. 当落在区间之外的时候,就找它到边界的距离

特别注意,显然会有小于下界和大于上界两种情况,但是要注意M的取值是:两个情况的最大值,也就是说,在对超出上界的数据进行正向化的时候,不一定是用某个比较大的数据与上界的差的最大值(如果某个比较小的数据与下界的差比较大数据与上界的差的最大值要大,那就用下界的那个最大差)

指标的量纲

指标正向化之后,由于成绩的单位是分,争吵的次数单位是次

两者根本不是同一类东西把!

那在进行综合评价的时候,我们要对已经正向化的矩阵进行标准化处理消去他们的量纲

标准化处理的计算公式:

咋理解呢?

不就是某个方向的投影/模长吗?

如果是在二维向量中,那不就是我们初中就学过的投影相关的角度吗?cos值那些。

根据指标计算得分

当只有一个指标的时候,即矩阵只有一列,这个时候,计算距离只要减一减就OK了,就相当于是一个数轴嘛,或者说就是一个单一的x轴,然而当有两个指标的时候,就可以看作有x和y轴,这个时候,每一个指标代表一个数轴,于是距离就变成了平方和之后开平方(这里挺自然的吧)

当有多个(多于2个)指标的时候,就相当于有好多好多的轴,于是同样非常自然的想到向量的模

这里比较好的理解方法是:

(对于同一行,先各个指标求差,再求平方、开根号)

​ 得到的是未归一化的得分,和前面单指标一样,本质都是右上角那一串红色字!!!

  1. 要计算某一行的得分,先看某一行的各个指标
  2. 每一个指标都有最大值和最小值,当前行的该指标和当前指标中的最大值与最小值之间的差就相当于 “这个维度的距离” , 就好比在x轴上的某两点坐标差,
  3. 后一个指标用同样的方法求差就相当于得到y轴上两点距离只差……多维度就相当于多个互相垂直的坐标轴,他们的平方和开根号之后得到欧氏距离

代码实现:

  1. 数据的载入:

​ 在工作区新建一个矩阵,把excel中的数据粘贴进来。如果以后不想每次用到都复制粘贴一次的话,就可以把这个矩阵另存为.mat后缀的文件,当代码(.m)和数据(.mat)在同一个目录下,就可以用load XXX.mat进行装载

  1. 指标正向化:
  • 极小型指标:
function [posit_x] = Min2Max(x)posit_x = max(x) - x; %正向化
end
  • 中间型指标:
function [posit_x] = Mid2Max(x, best)M = max(abs(x - best)); %得到最大偏移值作为分母posit_x = 1 - abs(x - best) / M; %正向化
end
  • 区间型指标:
function [posit_x] = Inter2Max(x,a,b)r_x = size(x,1); %得到列向量的行数M = max([a - min(x)], max(x) - b); %找到最大的偏移量posit_x = zeros(r_x , 1);  %初始化posit_x全为0% 为什么这里要把posit_x初始化?前面两个正向化都没有初始化呀?% 是因为之前都是矩阵的运算,结果肯定是维数相同的;而下面是对每一个元素处理的,没有提前树立好全局的观念,因此要初始化(吗?)for i = 1 : r_x %遍历if x(i) < a %小于下界posit_x(i) = 1 - (a - x(i)) / M;elseif x(i) > b %大于上界posit_x(i) = 1 - (x(i) - b) / M;else %上下界之间posit_x(i) = 1;endend
end

把以上三个类型的正向化函数封装在一个大的正向化函数Positivization中:

function [posit_x] = Positivization(x,type,i)if type == 1 %极小型disp(['第' num2str(i) '列是极小型,正在正向化']);posit_x = Min2Max(x); %调用Min2Max函数来正向化disp(['第' num2str(i) '列极小型正向化处理完成']);disp('~~~~~~~~~~~~~~~~分界线~~~~~~~~~~~~~~~~~');elseif type == 2 %中间型disp(['第' num2str(i) '列是中间型']);best = input('请输入最佳的那一个值: ');posit_x = Mid2Max(x,best);disp(['第' num2str(i) '列极小型正向化处理完成']);disp('~~~~~~~~~~~~~~~~分界线~~~~~~~~~~~~~~~~~');elseif type == 3 %区间型disp(['第' num2str(i) '列是区间型']);a = input('请输入区间的下界: ');b = input('请输入区间的上界: ');posit_x = Inter2Max(x,a,b);disp(['第' num2str(i) '列取间型正向化处理完成']);disp('~~~~~~~~~~~~~~~~分界线~~~~~~~~~~~~~~~~~');elsedisp('没有这种类型的指标,请检查Type向量中是否除了1、2、3之外的其他值');end
end
%输入变量有三个:
%x:需要正向化处理的指标对应的原始列向量
%type:指标的类型(1:极小型,2:中间型,3:区间型)
  1. 对每一项指标进行标准化,即去量纲
% 第三步:对正向化后的矩阵进行标准化
Z = X./ repmat(sum(X.*X).^0.5,n ,1)
disp('标准化矩阵');
disp(Z);
  1. 计算最大值距离和最小值距离,根据公式算出得分,并进行归一化处理
%第四步:计算最大值的距离和最小值的距离,并算出得分
D_P = sum([(Z - repmat(max(Z),n,1)).^2],2).^0.5;%D+  与最大值的距离向量;
D_N = sum([(Z - repmat(min(Z),n,1)).^2],2).^0.5;%D-  与最小值的距离向量;
S = D_N./(D_P+D_N); %根据公式计算得分
disp('最后的得分为:');
stand_S = S/sum(S); %归一化处理
[sorted_S,index] = sort(stand_S,'descend'); %降序排列,结果存在sorted_S变量中,并带有索引index

Topsis模型小记相关推荐

  1. 基于熵权法对Topsis模型的修正

    基于熵权法对Topsis模型的修正 有n个要评价的对象,m个评价指标的标准化矩阵,可以使用层次分析法给这m个评价指标确定权重 ∑j=1mωj=1\sum_{j=1}^m{\omega_j}=1 j=1 ...

  2. 数学建模-Topsis模型(Matlab)

    注意:代码文件仅供参考,一定不要直接用于自己的数模论文中 国赛对于论文的查重要求非常严格,代码雷同也算作抄袭 如何修改代码避免查重的方法:https://www.bilibili.com/video/ ...

  3. TOPSIS模型原理和MATLAB代码实现

    IMMC2020:熵权TOPSIS 笔记整理来自清风老师的数学建模课程:TOPSIS教程 目录 1. 层次分析法的局限性(主观求权重方法) 2. TOPSIS法引入 2.1 一个指标的情况 2.2 2 ...

  4. 优劣解距离法Topsis模型

    文章目录 一.Topsis法的概述 二.模型建立的步骤 1.将原始矩阵正向化 1)极大型 2)极小型 3)中间型 4)区间型 2.正向化矩阵标准化 3.计算得分并归一化 一.Topsis法的概述 To ...

  5. MATLAB之优劣解距离法Topsis模型

    图片来源于清风视频,强烈推举清风视频学建模 一.什么是优劣解距离法 TOPSIS法是一种常用的综合评价方法,其能充分利用原始数据的信息,其结果能精确地反映各评价方案之间的差距. 二.一些简单的模型 成 ...

  6. 如何用matlaab把csv转为mat文件_数学建模竞赛学习笔记:用TOPSIS模型进行综合评价

    笔记整理来自清风老师的数学建模课程(可以在B站里搜索到,头条无法放站外链接,我就不放了):TOPSIS教程 目录 1. 层次分析法的局限性(主观求权重方法) 2. TOPSIS法引入 2.1 一个指标 ...

  7. 建模学习笔记(二)Topsis模型算法步骤

    三点解释 比较的对象一般要远大于两个.(例如比较一个班级的成绩) 比较的指标也往往不只是一个方面的,例如成绩.工时数.课外竞赛得分等. 有很多指标不存在理论上的最大值和最小值,例如衡量经济增长水平的指 ...

  8. 评价类模型---TOPSIS法

    TOPSIS法 统一指标类型 标准化处理 我们根据例子让大家更好的知道应该如何计算 总结 第一步:将原始矩阵正向化 第二步:正向化矩阵标准化 第三步:计算得分并归一化 练习题 模型的扩展 代码运行的几 ...

  9. 【2.1】 数学建模值之TOPSIS(优劣解距离模型)的具体算法步骤详解

    一.回顾层次分析法的局限性 二.topsis模型的介绍 三.模型的具体算法步骤 四.该模型的两个注意点 一.回顾层次分析法的局限性 评价的决策层不能太多,太多的话n会很大,判断矩阵和一致矩阵差异可能会 ...

最新文章

  1. 【MySQL】面试官:如何查询和删除MySQL中重复的记录?
  2. eclipse 工程复制
  3. HDU 4587 TWO NODES(割两个点的最大连通分支数)
  4. python将字典内容存入mysql
  5. linux-2.6.29内核配置、编译与安装
  6. 【性能优化】优化笔记之一:图像RGB与YUV转换优化
  7. 读取.Properties配置文件
  8. Oracle集群(RAC)及 jdbc 连接双机数据库
  9. 用Python2编译Python3.X的代码: __future__ 模块
  10. Swashbuckle Swagger组件扩展
  11. 硬盘格式化后数据怎么恢复找回?试下这个!
  12. AopAutoConfiguration matched的异常
  13. java中isolate时间_Flutter 92: 图解 Dart 单线程实现异步处理之 Isolate (一)
  14. HTML5~用户注册页面的设计与实现
  15. VS2005使用体验
  16. Java Web之过滤器(Filter)
  17. 11、struct 结构
  18. 雷军的“赌局”:10亿美元All in金山云,赴美上市能赢阿里腾讯吗?
  19. 【USACO12JAN】—视频游戏的连击Video Game Combos(AC自动机+dp)
  20. postgresql 分组查询

热门文章

  1. Processing大作业——绘画系统
  2. 主线程 子线程死掉_当线程死时,子进程也会死
  3. 2021最新Navicat15下载安装包
  4. Thinkjs——定时任务配置代码示例
  5. 分享一个电信永久0月租的手机卡
  6. 在cmd下import cv2报错——OpenCV实现BRISK
  7. 使用matlab处理.nii图像
  8. 读取nii或nii.gz文件中的信息即输出图像
  9. “利空”砸盘?中本聪:这个锅我不背
  10. K8s中的CNI网络模型