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 ...
随机推荐
- ansible(3)--ansible的相关命令行工具
目录 1 ansible命令详解 2 ansible-doc显示模块帮助信息 3 ansible-playbook 4 ansible-galaxy 5 ansible-console 1 ansib ...
- ExpiringMap学习总结
一.ExpiringMap简介 ExpiringMap是一个轻量级的Java缓存方式 针对一些小体量的项目,存储的数据量也不是很大(如校验码)的情况下,使用Redis会增加系统的复杂性和维护难度.它的 ...
- fastposter v2.15.0 从繁琐到简单,简洁好用的海报生成器
fastposter v2.15.0 从繁琐到简单,简洁好用的海报生成器 从繁琐到简单,简洁好用的海报生成器 我很高兴向大家推荐一款令人兴奋的工具--Fastposter海报生成器.作为一名开发者,我 ...
- fastposter v2.8.4 发布 电商海报生成器
fastposter v2.8.4 发布 电商海报生成器 fastposter海报生成器,电商海报编辑器,电商海报设计器,fast快速生成海报 海报制作 海报开发.贰维海报,图片海报,分享海报贰维码推 ...
- IPv6 — 移动性
目录 文章目录 目录 前文列表 IPv6 的移动性 移动操作 路由优化 前文列表 <IPv6 - 网际协议第 6 版> <IPv6 - 地址格式与寻址模式> <IPv6 ...
- 前后端分离项目(vue+springboot)集成pageoffice实现在线编辑office文件
前后端分离项目下使用PageOffice原理图 集成步骤 前端 vue 项目 在您Vue项目的根目录下index.html中引用后端项目根目录下pageoffice.js文件.例如: <scri ...
- CentOS7 防火墙(firewall)的命令详解
复制代码 安装:yum install firewalld 1.firewalld的基本使用 启动: systemctl start firewalld 查看状态: systemctl status ...
- Pandas学习之路【3】
新增列的一些操作 1.新增一个列,直接给列赋值 # 取所有行,新增的列为new_col df.loc[:, 'new_col'] = 100 2.使用df.apply方法给新增的列赋值 def get ...
- 记录一下Android usb相关的知识学习
在SecondStageMain中会先调用PropertyInit做属性初始化,该方法会调用PropertyLoadBootDefaults加载持久化的属性主要加载位置: /system/build. ...
- C#自动安装字体
在Windows系统中,原有自带的字体样式有限,有时候我们的程序会使用到个别稀有或系统不自带的字体.因此我们需要将字体打包到程序中,当程序启动时,检测系统是否有该字体,如果没有则安装该字体,也可以动态 ...