层次分析法(MATLAB)

news2024/12/26 10:41:04

对之前的学习进行总结,整个比赛下来好像就用到了这个方法,最后也不知道对不对,反正最后还有点赶,就是很懵的那种,对于层次分析话的还是有点了解了,由于是纯小白,有错误的地方希望各位大佬能够指出。

目录

数据提取

归一化处理

判断矩阵

一致性检验

 算术平均法求权重

加权求和

过程体会


数据提取

有些题目就会自己提供数据,数据是存储在Excel里面的,要导入的话我是用xlsread来实现的,因为是只用到了数值部分,所以另外两个参数就用~替代了。假设就是要提取“数学建模.xls”里面sheet1表中的内容,前面跟着的文件的绝对路径,用相对路径应该也可以吧,我这里没尝试了。

%[num, txt, raw] = xlsread(filename, sheet, range)
[num,~,~]=xlsread('C:\Users\25496\Desktop\数学建模.xls','sheet1');

一般这种数据也是有规律的,集中在一块上面,直接就可以截取出来存在一个矩阵里面。如截取num中的1到10行,且5到14列的数据。如果有多组相同指标的数据,看是通过直接相加还是什么变成一组数据。

data=num(1:10,5:14);

这里有一个要注意的地方,因为不同指标之间的数量级不同,如果直接放在同一个矩阵里面,很小的数和一个更小的数放在一起,可能就会导致更小的整个指标的数据直接变成0,这显然是不被允许的,我当时的处理是把他们没个指标的数据放在集合中,因为后面要归一化处理,等处理之后在放在同一个矩阵里面,现在的话可以直接给他们整体乘以一个倍数,就可以让他们不至于被忽略了。

 

 

归一化处理

因为不同指标之间的数量级可以不用,指标内部的单位一致,但是指标和指标之后的值不同,这肯定是要进行归一化处理的,不然一个很大的数但是这个指标的权重却比较小,这不归一化处理这整个的误差就很大了。这里采用的是通过先求得整个指标数据的总和,再用每一个指标的数据除以整个总和,假设指标是一列一列的,就是用这一个数据除以这一列的总和得到一个数值。这样处理之后不同指标数量级一致,指标内部之间的排名没有发生改变。

这个计算的话,我比较担心的就是精度的问题了,然后可以直接通过循环来完成整个过程。这个除数的话习惯写还是用./,用/也行。

matlab中乘法“*”和点乘“.*”;除法“/”和点除“./”的联系和区别。_matlab 矩阵乘法_xiaotao_1的博客-CSDN博客icon-default.png?t=N5F7https://blog.csdn.net/xiaotao_1/article/details/79026406

%归一化处理
[mm,nn]=size(data);%数据行数和列数

for j=1:nn    %针对每一列
    msum=sum(data(:,j));    %求这一列元素之和
    for i=1:mm
        data(i,j)=data(i,j)./msum;    %每一个元素的值都除以这行的和
    end
end

 我当时是转换成元胞数组了,然后运算之后要变成矩阵的形式。

%归一化处理
[~,nn]=size(ingredient);
[mm,~]=size(ingredient{1});

for j=1:nn
    msum=sum(ingredient1{j});
    for i=1:mm
        ingredient{j}(i)=ingredient{j}(i)./msum;
    end
end

%元胞数组转矩阵
ing=cell2mat(ingredient);

判断矩阵

因为不同指标之间的含义不同,所以侧重点也不同,所以一般是通过指标数值乘以权重再相加来区分重要性的,指标我们之前已经统一在同一个数量级了,现在我们要求的就是权重了。

首先就要人为设定一个判断矩阵,来表示指标之间的重要性,那么可以随便设定吗,这显然是不可以的,但是为什么不可以呢,因为我们对指标的重要性进行两两比较构造的判断矩阵,这可能就会导致出现不一致的情况,所以矩阵是否满足要求,就是要看他是否可以通过一致性检验。

一致性检验

计算一致性比例CR,CR=CI/RI,其中CI=(λmax-n)/(n-1),λmax为判断矩阵的最大特征值,n为指标数(判断矩阵行数),RI为平均随机一致性指标,通过查表可得到不同n对应的RI。

如果一致性比例CR=0,说明判断矩阵是一致矩阵,不会出现任何矛盾的情况。

如果一致性比例CR<0.1,可以认为判断矩阵一致举证的“差异”不大,通过一致性检验。

如果一致性比例CR>=0.1,需要修改判断矩阵,直到CR<0.1。

这个当时的话我一直不知道RI是什么意思,查表?到哪里查表,后面发现这个就是一个固定的东西。

RI=[0,0,0.58,0.9,1.12,1.24,1.32,1.41,1.45,1.49];

然后对于判断矩阵的话,当时我们选了九个指标吧,可以想象当时的难度多大,不过还好通过一些特殊手段是直接得到了一个判断矩阵。缺点就是忽略的重要性那个东西,就是求出这个判断矩阵,通过判断矩阵来得到他们之间的重要性,调节指标在程序中的位置。

A=[1  3/2  3/4  1/5  1/4  3/2  2    3/4  1
  2/3 1    1/2  1/4  1/6  1    3/2  1    1/2
  4/3 2    1    1/3  1/2  2    3/2  1    3/2
  5   4    3    1    2    4    5    2    4
  4   6    2    1/2  1    3    4    2    5
  2/3 1    1/2  1/4  1/3  1    3/2  1    1/2
  1/2 2/3  2/3  1/5  1/4  2/3  1    1/3  2/3
  4/3 1    1    1/2  1/2  2    3/2  1    3/2
  1   2    2/3  1/4  1/5  2    3/2  2/3  1];

那么怎么判断他对不对呢,就是要看一致性检验了。不得不说MATLAB是真的方便,最大特征值就求出来了。

A=[1  3/2  3/4  1/5  1/4  3/2  2    3/4  1
  2/3 1    1/2  1/4  1/6  1    3/2  1    1/2
  4/3 2    1    1/3  1/2  2    3/2  1    3/2
  5   4    3    1    2    4    5    2    4
  4   6    2    1/2  1    3    4    2    5
  2/3 1    1/2  1/4  1/3  1    3/2  1    1/2
  1/2 2/3  2/3  1/5  1/4  2/3  1    1/3  2/3
  4/3 1    1    1/2  1/2  2    3/2  1    3/2
  1   2    2/3  1/4  1/5  2    3/2  2/3  1];

%一致性检验
%求矩阵特征值
maxlam=max(eig(A));
[~,n]=size(A);

RI=[0,0,0.58,0.9,1.12,1.24,1.32,1.41,1.45,1.49];

CI=(maxlam-n)/(n-1);
CR=CI/RI(n);

if CR<0.10
    disp("通过一致性检测")
else
    disp("没有通过一致性检测")
    return %终止运行
end

 算术平均法求权重

这个我最终就是要求权重,那么每一个指标对应的权重怎么求呢?这里是通过算术平均法来求解的。

  • 将通过一致性检验的判断矩阵按列归一化
  • 每一列分别求和,求和的结果除以n,得到列向量就是权重向量。
%算数平均法求权重
[n,~]=size(A);
Asum=sum(A,1);%按列求和
Aprogress=A./(ones(n,1)*Asum);

%求权重向量
W=sum(Aprogress,2)./n;

这里要注意的就是sum函数,sum(A,1)是按列求和,sum(Aprogress,2)是按行求和的。默认是按列求和的。

matlab中sum函数的用法_matlab sum函数_一只佳佳怪的博客-CSDN博客icon-default.png?t=N5F7https://blog.csdn.net/iii66yy/article/details/128474643

加权求和

最后就是对所有的指标进行加权求和了,得到最后的总评分。

gred=ing*W;

 当时我们是14个人,选了9个指标吧,也不知道是不是这样写的,最后就得到了这最后的一组数据,就是他们14个人的综合打分了,数值越大的就越优秀了。

过程体会

不太知道是否正确,就记录了整个的过程,下面是我自己对问题的理解:

为什么要对原始的指标进行归一化处理?

因为不同指标之间的数量级不同。

为什么要设定判断矩阵?

因为不同指标之间的侧重不同,假设指标A比指标B更加能够说明问题,那指标A肯定就比指标B更加重要一些。整个的设定过程本身就是主观的,好比一道菜肴,有人认为营养更加重要,也有人认为味道更加重要,所以这个设定就是看个人的倾向,能通过一致性检验的矩阵就是满足的矩阵。

为什么要用算术平均法求权重?

这个的话应该还有其他的方法,这里用的是算术平均分求的,先对判断矩阵进行归一化之后,就算术平均得到权重,当做整个指标的权重了。最后刚好行列向量相乘,得到最终的得分矩阵。

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

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

相关文章

微服务远程调用openFeign整合

✅作者简介&#xff1a;大家好&#xff0c;我是Cisyam&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Cisyam-Shark的博客 &#x1f49e;当前专栏&#xff1a; 微服务探索之旅 ✨特色专…

go详细环境配置(windows)

下载go 安装包 官网&#xff1a; https://go.dev/dl/ 下载压缩包&#xff0c;解压 环境变量配置 GOROOT 配置你解压的目录 在Path中追加一条 %GOROOT%\bin 这里go对比JAVA还多了一个配置&#xff1a; GOPATH 配置go以后项目的地址 并在自己新建的GOPATH路径文件夹下新建三…

微服务中常见问题

Spring Cloud 组件 Spring Cloud五大组件有哪些&#xff1f; Eureka&#xff1a;注册中心 Ribbon&#xff1a;负载均衡 Feign&#xff1a;远程调用 Hystrix&#xff1a;服务熔断 Zuul/Gateway&#xff1a;服务网关 随着SpringCloud Alibaba在国内兴起&#xff0c;我们项目中…

MySQL安装教程(2023年,4月)

一、MySQL下载&#xff08;安装版&#xff09; 1、进入MySQL官网 官网地址&#xff1a;https://www.mysql.com/ 2、点击【DOWNLOADS】。 3、向下滑&#xff0c;点击【MySQL Community (GPL) Downloads】下载MySQL社区版。 4、点击【MySQL Installer for Windows】下载MySQL安…

pandas解决数据缺失、重复的方法与实践

1. 数据缺失 常见的数据缺失是指一条数据记录中&#xff0c;某个数据项没有值&#xff0c;延申到实际应用中&#xff0c;还有一种时间序列的缺失&#xff0c;例如按整点采集数据&#xff0c;缺少某一时刻的数据&#xff08;缺少一整行数据&#xff09;。 解决方法&#xff0c…

Type-C PD显示器方案简介

方案概述 LDR6020 Type-C PD显示器方案可以给显示器提供一个全功能C口&#xff0c;支持手机&#xff0c;电脑&#xff0c;游戏主机等一线投屏功能&#xff0c;同时支持PD快充输出。LDR6020内置了 USB Power Delivery 控制器和 PD BMC PHY 收发器&#xff0c;支持PD2.0/3.0等快…

leetcode:1848. 到目标元素的最小距离(python3解法)

难度&#xff1a;简单 给你一个整数数组 nums &#xff08;下标 从 0 开始 计数&#xff09;以及两个整数 target 和 start &#xff0c;请你找出一个下标 i &#xff0c;满足 nums[i] target 且 abs(i - start) 最小化 。注意&#xff1a;abs(x) 表示 x 的绝对值。 返回 abs(…

Jenkins之节点的使用

节点概念 Jenkins服务运行在一台服务器上&#xff0c;服务器的资源是有限的&#xff0c;Jenkins服务的构建速度受服务器资源影响&#xff0c;也是有限的。当我们需要构建的项目比较多或规模比较大的时候&#xff0c;可能会超出Jenkins的构建能力&#xff0c;超出其构建能力&am…

el-table合计行单元格合并、单元格样式修改

1、目标效果 源码放在下面&#xff0c;复制粘贴即可 &#xff08;1&#xff09;合计行放在头部&#xff0c;且字体颜色变粗、合计行背景色变粗 &#xff08;2&#xff09;合计行年龄算平均值且字体颜色为绿色&#xff0c;财产算总数且字体颜色为红色 2、原理 2.1、el-table中s…

clickhosue:8123和9000

8123和9000是ClickHouse数据库的两个不同的端口&#xff0c;它们具有不同的功能和使用方式。 8123端口&#xff08;HTTP端口&#xff09;&#xff1a; 用于通过HTTP协议与ClickHouse数据库进行交互。 支持RESTful API和HTTP查询语法。 可以使用浏览器、curl等工具发送HTTP请…

【备战秋招】每日一题:4月8日美团春招第四题:题面+题目思路 + C++/python/js/Go/java带注释

为了更好的阅读体检&#xff0c;为了更好的阅读体检&#xff0c;&#xff0c;可以查看我的算法学习博客第四题-田地行走 在线评测链接:P1169 题目描述 塔子哥是一个农民&#xff0c;他有一片 大小的田地&#xff0c;共 n 行 m 列&#xff0c;其中行和列都用从 1 开始的整数…

lua中chunk的理解

在Lua中&#xff0c;一个chunk是一段可执行的Lua代码。通常&#xff0c;一个chunk由一系列语句和表达式组成&#xff0c;可以是一个完整的程序文件&#xff0c;也可以是一个交互式控制台中输入的一行代码。 例如&#xff0c;下面是一个简单的Lua chunk&#xff1a; print(&qu…

阿里巴巴最新30万字1008道Java经典面试题总结(附答案)限时开源

前言 在备战面试的时候&#xff0c;大家总会通过刷题的方式来准备&#xff0c;然而刷题是有用没错&#xff0c;有时候还得看看押题能不能压中重点&#xff0c;大厂喜欢问些什么技术点&#xff0c;不然当那个笑眯眯的面试官问出那些你再熟悉不过的问题 Java 问题时&#xff0c;…

vue2.x项目引入CKEditor4的两种方式

百度用了不行的看过来&#xff0c;本文专治各种流程不通的 一.直接npm下载型 下载ckeditor到vue项目 npm install ckeditor4-vue2.在main.js里导入 import Vue from vue; import CKEditor from ckeditor4-vue;Vue.use( CKEditor );3.在需要使用的组件里这样使用 <templ…

day54_spring整合mybatis

SpringMybatis整合【重点】 Spring学完了,主要学习Spring两个内容:IOCAOP 利用这两个知识来完成spring和mybatis的整合 IOC: 控制反转,用来创建对象 XxxService通过数据源创建数据库连接创建SqlSessionFactory创建SqlSession获得XxxMapper代理对象 AOP: 面向切面 控制事务 具体…

基于spring的前后端一体化积分商城系统

系统介绍 积分商城系统是一个基于Spring、MySQL和Redis等技术栈构建的全功能商城解决方案。该系统旨在为用户提供一个便捷的购物体验&#xff0c;并以积分作为支付和奖励的核心机制。 系统的核心功能包括商品浏览、购买下单、积分管理和订单处理。用户可以通过客户端访问系统…

一业余无线电爱好者因违规被罚2.4万美元,是否合理?

据一份名为《关于处罚款项的通知》&#xff0c;美国联邦通信委员会经过调查&#xff0c;对加利福尼亚州的一名业余无线电持有人菲利普J博代特&#xff08;业余电台呼号&#xff1a;N6PJB&#xff09;&#xff0c;处以巨额罚款&#xff0c;罚款金额为2.4万美元&#xff0c;折合人…

颠覆2D对象检测模型,MediaPipe 3D对象检测还原真实的对象特征

关于对象检测,我们以前分享的文章都是介绍的2D的对象检测,但是我们很多使用场景下,希望检测到的对象能够以3D的影像呈现出来,本期介绍的MediaPipe Objectron便是是用于日常对象的移动实时3D对象检测解决方案。它检测2D图像中的对象,并通过在Objectron数据集上训练的机器学…

6.17黄金反弹是否到顶,下周开盘如何布局

近期有哪些消息面影响黄金走势&#xff1f;下周黄金多空该如何研判&#xff1f; ​黄金消息面解析&#xff1a;黄金周五(6月16日)小幅收高&#xff0c;但在触及5月以来最低盘中水准后本周以下跌收官。美市尾盘&#xff0c;现货黄金收报1957.68美元/盎司&#xff0c;下跌0.19美…

干货|来自新加坡管理大学、KAUST的大模型最新进展:推荐系统、未来AI社会研究……...

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; ChatGPT的横空出世刷新了我们对这个世界的认知和想象&#xff0c;而大型语言模型也逐渐成为学术界的研究热点。在自然语言处理、智能推荐、知识获取、智能对话等领域&#xff0c;大模型发挥着越来越重要的作用。…