TOPSIS模型原理以及代码实现
TOPSIS 法是一种常用的组内综合评价方法,能充分利用原始数据的信息,其结果能精确地反映各评价方案之间的差距。下面我们来介绍具体步骤与代码实现
问题提出
通过这20条河流的4个指标,对这20条河流进行打分

第一步:数据输入
1.如何从excel中复制数据直接储存为matlab变量
选取想要的数据

在matlab的工作区中新建一个变量,将数据复制到变量中

2.如何将变量储存为mat文件,利用load函数加载数据
在matlab工作区右键点击变量,选择另存为,即可把变量储存在文件夹中,使用load(‘变量名’)即可加载数据
第二步:判断是否需要正向化
因为topsis法使用指标值与最优解与最劣解的距离进行评价,但是有些指标不是越大越好,为了计算方便,我们需要将指标值进行正向化
1.常见指标如图所示

2.正向化方法



3.代码实现
代码实现的过程实际上是矩阵计算的过程,要求编程者熟悉对矩阵的语法
(1)提供基础性息,并判断是否需要正向化

(2)用户指定需要正向化的列与正向化方法

(3) Positivization(x,type,i)函数进行计算
第一个参数x为需要进行正向化的的列,可以用向量来表示多列。type也可以是一个向量,与x对应表示正向化的方法,而i表示列的索引
代码如图所示,主要表示一个分段函数,其中正向化的方法储存在另外三个函数中

第三步:正向化矩阵标准化
1.计算原理
以列为一个单位,对矩阵进行标准化。也就是对每一个指标分别进行标准化,去除量纲的影响

2.代码实现
sum(X.*X).^0.5为标准化的分母,是一个对列进行平方求和后的行向量,利用repmat函数将其扩展n行,这样就与原矩阵的维度相同,方便进行点除。

第四步:计算得分并归一化
1.计算原理

2.代码实现
此过程与前面的数值计算无异,也就是用向量进行计算。
其中max(Z)表示对Z的每一列求最大值,得到一个行向量,扩展后与原矩阵进行运算;
sum函数将运算后得到的矩阵按列相加,得到一个行向量;
计算出D_positive与D_negtive后即可算出未归一化的得分S;
最后的sort函数则对得分进行排序,并记录下排序的索引。

TOPSIS模型原理以及代码实现的更多相关文章
- Actor模型原理
1.Actor模型 在使用Java进行并发编程时需要特别的关注锁和内存原子性等一系列线程问题,而Actor模型内部的状态由它自己维护即它内部数据只能由它自己修改(通过消息传递来进行状态修改),所以使用 ...
- 机器学习之决策树三-CART原理与代码实现
决策树系列三—CART原理与代码实现 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/9482885.html ID ...
- 机器学习之决策树一-ID3原理与代码实现
决策树之系列一ID3原理与代码实现 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/9429257.html 应用实 ...
- [NLP] TextCNN模型原理和实现
1. 模型原理 1.1 论文 Yoon Kim在论文(2014 EMNLP) Convolutional Neural Networks for Sentence Classification提出Te ...
- Holt-Winters模型原理分析
Holt-Winters模型原理分析及代码实现(python) from:https://blog.csdn.net/u010665216/article/details/78051192 引言 最近 ...
- DeepLearning tutorial(3)MLP多层感知机原理简介+代码详解
本文介绍多层感知机算法,特别是详细解读其代码实现,基于python theano,代码来自:Multilayer Perceptron,如果你想详细了解多层感知机算法,可以参考:UFLDL教程,或者参 ...
- OpenStack 虚拟机冷/热迁移的实现原理与代码分析
目录 文章目录 目录 前文列表 冷迁移代码分析(基于 Newton) Nova 冷迁移实现原理 热迁移代码分析 Nova 热迁移实现原理 向 libvirtd 发出 Live Migration 指令 ...
- 图机器学习(GML)&图神经网络(GNN)原理和代码实现(前置学习系列二)
项目链接:https://aistudio.baidu.com/aistudio/projectdetail/4990947?contributionType=1 欢迎fork欢迎三连!文章篇幅有限, ...
- flume原理及代码实现
转载标明出处:http://www.cnblogs.com/adealjason/p/6240122.html 最近想玩一下流计算,先看了flume的实现原理及源码 源码可以去apache 官网下载 ...
- word2vec模型原理与实现
word2vec是Google在2013年开源的一款将词表征为实数值向量的高效工具. gensim包提供了word2vec的python接口. word2vec采用了CBOW(Continuous B ...
随机推荐
- 如何使用Mac远程控制Windows电脑?
如何使用Mac远程控制Windows电脑?在你开始之前,设置您要远程处理的 Windows 计算机. 先安装 Microsoft Remote Desktop. 打开 Microsoft Remote ...
- vue我自己的动态菜单思路
1.在router里把所有的路由都加上. 2.后端存储路由path和其他设计需要的信息. 3.登录后,后端返回菜单树,根据权限不同,返回的菜单不同,并且还要返回每个path代表的页面具有的权限数组.可 ...
- 『手撕Vue-CLI』添加终端用户交互
前言 经过上一篇文章的梳理,实现了可以从 GitHub 上拉取模板项目名称,已经可以得知可使用的模板有哪些了,那么我觉得是不是要进行选择呢?所以这一篇文章就来实现终端用户交互,让用户可以自己选择想要使 ...
- 深入探讨Function Calling:在Semantic Kernel中的应用实践
引言 上一章我们熟悉了 OpenAI 的 function calling 的执行原理,这一章节我们讲解一下 function calling 在 Semantic Kernel 的应用. 在Open ...
- NOIP模拟64
T1 三元组 解题思路 一看题面,好像是一道数学题,但不完全是,或者说根本不是... 比较好想到的是 \(\mathcal{O}(n^2)\) 和 \(\mathcal{O}(nk)\) 的做法,然后 ...
- CMake官网教程学习
简介 本文档是根据CMake的官方教程学习的笔记,同时将教程中C++实现的代码更改为C语言实现.当前还未学习完. 教程官网:CMake Tutorial - CMake 3.27.0-rc1 Docu ...
- git创建分支 解决git网速太慢
所谓的分支,就是每个人负责的不同的模块 整个项目有一个主干 master 所有的分支都是 从主干 maser 上 分支而来的 ...
- NCNN的内存显存分配器ncnn::Allocator & ncnn::VkAllocator翻译及其差异对比的学习笔记(nihui亲审过滴)
NCNN的内存分配器 ncnn::Allocator 通用内存分配器 ncnn::PoolAllocator 内存池分配器 可以设置池大小,减少分配内存和析构内存次数,空间换时间 ncnn:: ...
- LeetCode 460. LFU Cache LFU缓存 (C++/Java)
题目: Design and implement a data structure for Least Frequently Used (LFU)cache. It should support th ...
- WIN8 WIN10 WIN11离线安装 .NET 3.5
WIN8 WIN10 WIN11离线安装 .NET 3.5 以WIN10为例: 1.双击WIN10 ISO 镜像,看挂载的是哪个盘符.我这边是E:. 2.使用 WIN + X 快捷键,打开 Windo ...