文章目录

  • 一、层次分析法是什么?
  • 二、层次分析法具体实现
  • 1.具体名称解释
  • 2.具体流程(开始摆烂)
  • 注意事项
  • 三.具体代码实现
  • 四.对代码的一点补充(主要针对一致性检验)


一、层次分析法是什么?

先说标准的说法:层次分析法是指将一个复杂的多目标决策问题作为一个系统,将目标分解为多个目标或准则,进而分解为多指标(或准则、约束)的若干层次,通过定性指标模糊量化方法算出层次单排序(权数)和总排序,以作为目标(多指标)、多方案优化决策的系统方法。
说人话就是假如说你购买一样东西,首先得货比三家吧,谁都不想当冤大头是吧,那么这三家店就是你根据目的得出的方案,那怎么比呢,你买的东西有一定的性能指标吧,看谁做的好就买谁的,那这样你买东西这件事就可以分为:设定目标,设定指标,设定方案,根据指标比较东西最后购买这几步,这就是层次分析法的基本思路

二、层次分析法具体实现

1.具体名称解释

一般来说,层次分析法主要以以下几个部分构成,目的层(买东西就是你的目的),准则层(你买东西的性能指标),方案层(货比三家中的“三家”,当然,准测层中很多时候不止一个性能指标,我们往往是综合考虑一个东西的颜值,性能等因素来决定买哪个,那是考虑a因素多一点还是考虑b因素多一点呢,我们可以用x1,x2…等数字来分别表示a因素,b因素,c因素…的重要程度,其中x1+x2+…=1,x1,x2…就可以叫做权重
温馨提示:(层次分析法主观性有点强,后面摆烂了,写的没这么详细,没学过的小白有可能看不懂了)

2.具体流程(开始摆烂)

深度学习中层次标准化操作的作用_一致性检验

注意事项

1.看b站老哥说过,心理学家说过比较因素不宜超过九个,及每层不要超过九个因素,当然,个人感觉比较因素少的好处主要在一致性检验那里比较好通过,也有RI的因素,一般来说Ri最多到15,后面的一致性检验不好搞了
2.一致性检验,一致性检验,一致性检验,重要的事情说三遍,这个比较重要,具体实现步骤后面会说
3**.在论文写作中,应该先对判断矩阵进行一致性检验,然后再计算权重**,(具体见下文)

三.具体代码实现

首先对上文进行一点补充吧,这个清风讲的比较好,大家可以看一下他写的注释
%% 注意:**在论文写作中,应该先对判断矩阵进行一致性检验,然后再计算权重,**
因为只有判断矩阵通过了一致性检验,其权重才是有意义的。
在下面的代码中,我们先计算了权重,然后再进行了一致性检验,
这是为了顺应计算过程,事实上在逻辑上是说不过去的。
因此大家自己写论文中如果用到了层次分析法,
一定要先对判断矩阵进行一致性检验。
而且要说明的是,只有非一致矩阵的判断矩阵才需要进行一致性检验。
如果你的判断矩阵本身就是一个一致矩阵,那么就没有必要进行一致性检验。
%%代码还是看的B站上清风大佬的
A =[1 1 4 1/3 3;
 1 1 4 1/3 3;
 1/4 1/4 1 1/3 1/2;
 3 3 3 1 3;
 1/3 1/3 2 1/3 1]
%% 方法3:特征值法求权重(23届建模老哥对求特征值和权重就介绍了这一种方法,所以这里就这样写了)
% 第一步:求出矩阵A的最大特征值以及其对应的特征向量
clc
[V,D] = eig(A)    %V是特征向量, D是由特征值构成的对角矩阵(除了对角线元素外,其余位置元素全为0)
Max_eig = max(max(D)) %也可以写成max(D(:))哦 ps:可以在命令行中打一下看D,D(:)有什么不同
[r,c] = find(D == Max_eig , 1)
% 找到D中第一个与最大特征值相等的元素的位置,记录它的行和列。

% 第二步:对求出的特征向量进行归一化即可得到我们的权重
V(:,c)
disp('特征值法求权重的结果为:');
disp( V(:,c) ./ sum(V(:,c)) )
% 我们先根据上面找到的最大特征值的列数c找到对应的特征向量,然后再进行标准化。

%% 计算一致性比例CR
clc
CI = (Max_eig - n) / (n-1);
RI=[0 0 0.52 0.89 1.12 1.26 1.36 1.41 1.46 1.49 1.52 1.54 1.56 1.58 1.59];  %注意哦,这里的RI最多支持 n = 15
CR=CI/RI(n);
disp('一致性指标CI=');disp(CI);
disp('一致性比例CR=');disp(CR);
if CR<0.10
    disp('因为CR < 0.10,所以该判断矩阵A的一致性可以接受!');
else
    disp('注意:CR >= 0.10,因此该判断矩阵A需要进行修改!');
end

四.对代码的一点补充(主要针对一致性检验)

清风大佬写的确实很好,但其实一致性检验分为两步,一个是单权向量进行一致性检验,就是对准则层这个单个矩阵进行一致性检验,另一个是对层次总排序进行一致性检验,代码中只给出了前者的层次性检验,因为图片比较多,所以我在网盘里用一个pdf的小例子来说明

链接:https://pan.baidu.com/s/1umc5d__bPRSzPHJlF05Smg?pwd=0000 
提取码:0000 
--来自百度网盘超级会员V4的分享