为什么优先在别人发表的论文中寻找指标呢?
因为:显得专业。
另外,别人研究使用的方法你也可以进行合理借鉴
假如你没找到相关的文献怎么办?
和小组成员来场头脑风暴 + 在平台上搜索别人或者专家的看法
强烈推荐一个很厉害的网站——虫部落‐快搜 : https://search.chongbuluo.com/
还可以去以下地方搜索:谷歌、百度、微信搜索、知乎搜索……
举例子:
现在小明纠结去苏杭、去北戴河还是去桂林旅游,我们要为他分析出最佳目的地,评价的准则或者说指标是:景色、花费、居住、饮食、交通。
关键是填好这张权重表格。
注意:在确定影响某因素的诸因子在该因素中所占的比重时,遇到的主要困难是这些比重常常不易定量化。此外,当影响某因素的因子较多时,直接考虑各因子对该因素有多大程度的影响时,常常会因考虑不周全、顾此失彼而使决策者提出与他实际认为的重要性程度不相一致的数据,甚至有可能提出一组隐含矛盾的数据。
——选自司守奎[kuí]老师的《数学建模算法与应用》
那么如何考虑它们的权重呢?我们决定用分而治之的方法。
问题:
一次性考虑这五个指标之间的关系,往往考虑不周。
解决方法:
两个两个指标进行比较,最终根据两两比较的结果来推算出权重如果用下表表示重要程度,请两两比较上述这五个指标对于选择最终的旅游景点的重要性。
(注:这里的重要性有时候解释为满意度更方便理解)
逐一进行了两两比较后,得出了这样一张表,其中蕴含了某种规律,请仔细想想哦。
总结:上面这个表是一个5×5的方阵,我们记为A,对应的元素为𝑎ij .
这个方阵有如下特点:
(1)𝑎ij表示的意义是,与指标𝑗相比,𝑖的重要程度。
(2)当𝑖=𝑗时,两个指标相同,因此同等重要记为1,这就解释了主对角线元素为1。
(3)𝑎ij>0且满足𝑎ij×𝑎ji=1 (我们称满足这一条件的矩阵为正互反矩阵)实际上,上面这个矩阵就是层次分析法中的判断矩阵。
得到了判断矩阵,就可以计算出权重了。具体方法我们稍后再讲。
下面说说一致矩阵:
一致矩阵的例子:
观察上面这两个矩阵的特点:各行(各列)之间成倍数关系。
若矩阵中每个元素𝑎ij>0且满足𝑎ij × 𝑎ji = 1 ,则我们称该矩阵为正互反矩阵。
在层次分析法中,我们构造的判断矩阵均是正互反矩阵。若正互反矩阵满足𝑎ij × 𝑎jk = 𝑎ik ,则我们称其为一致矩阵。注意:在使用判断矩阵求权重之前,必须对其进行一致性检验。
那怎么进行一致性检验呢?
原理:检验我们构造的判断矩阵和一致矩阵是否有太大的差别。
下面需要用到线性代数的知识,没学过的朋友可以忽略掉证明过程,只需要了解如何计算即可。
若正互反矩阵(判断矩阵)满足aij × ajk = aik,则我们称其为一致矩阵。
判断矩阵越不一致时,最大特征值与n相差就越大。
进行一致性检验的步骤:
第一步:计算一致性指标CI
第二步:查找对应的平均随机一致性指标RI
注:在实际运用中,n很少超过10,如果指标的个数大于10,则可考虑建立二级指标体系,或使用我们以后要学习的模糊综合评价模型。
第三步:计算一致性比例CR
如果CR < 0.1, 则可认为判断矩阵的一致性可以接受;否则需要对判断矩阵进行修正。
注:特征值可用matlab软件进行计算,没学过线性代数的朋友也不需要担心。如果特征值中有虚数,则比较的是特征值的模长。第四步:如果CR > 0.1 如何修正?
一致性指标CI:0.1087
一致性比例CR:0.2090
注意:CR>=0.10,因此该判断矩阵A需要进行修改。
修改思想:往一致矩阵上调整~~~一致矩阵各行成倍数关系。
关于一致性检验的两个小问题:
(1)平均随机一致性指标RI怎么计算来的?
答:
注意:RI我们只需要会查表即可,不用管怎么来的,另外有些地方给的RI的表格和上面的有
细微区别,以上面的为准,因为上面使用的人最多。(2) 为什么要这样构造CI,为什么要以0.1为划分依据?
答:大家有兴趣的话可以去查看作者的原论文,作者是通过多次蒙特卡罗模拟得到的最佳的方案。
解决了一致性检验,那么一致矩阵要怎么计算权重呢?
对于景色这点而言:
苏杭的重要性如果是1,那么北戴河的重要性就是1/2,桂林的重要性就是1/4.
注意,权重一定要进行归一化处理:
苏杭 = 1 /(1+0.5+0.25)
北戴河 = 0.5 /(1+0.5+0.25)
桂林 = 0.25 /(1+0.5+0.25)仅使用第一列的数据,计算出来的权重:
苏杭 = 1 /(1+0.5+0.2)= 0.5882
北戴河 = 0.5 /(1+0.5+0.2)= 0.2941
桂林 = 0.2 /(1+0.5+0.2)= 0.1177使用第二列的数据,计算出来的权重:
苏杭 = 2 /(2+1+0.5)= 0.5714
北戴河 = 1 /(2+1+0.5)= 0.2857
桂林 = 0.5 /(2+1+0.5)= 0.1429使用第三列的数据,计算出来的权重:
苏杭 = 5 /(5+2+1)= 0.625
北戴河 = 2 /(5+2+1)= 0.25
桂林 = 1 /(5+2+1)= 0.125
方法1:算术平均法求权重
仅使用第一列的数据,计算出来的权重:
苏杭 = 1 /(1+0.5+0.2)= 0.5882
北戴河 = 0.5 /(1+0.5+0.2)= 0.2941
桂林 = 0.2 /(1+0.5+0.2)= 0.1177使用第二列的数据,计算出来的权重:
苏杭 = 2 /(2+1+0.5)= 0.5714
北戴河 = 1 /(2+1+0.5)= 0.2857
桂林 = 0.5 /(2+1+0.5)= 0.1429使用第三列的数据,计算出来的权重:
苏杭 = 5 /(5+2+1)= 0.625
北戴河 = 2 /(5+2+1)= 0.25
桂林 = 1 /(5+2+1)= 0.125综合上述三列,我们求平均权重:
苏杭 = ( 0.5882 + 0.5714 + 0.625 ) / 3=0.5949
北戴河 = ( 0.2941 + 0.2857 + 0.25 ) / 3=0.2766
桂林 = ( 0.1177 + 0.1429 + 0.125 ) / 3=0.1285步骤:
第一步:将判断矩阵按照列归一化(每一个元素除以其所在列的和)
第二步:将归一化的各列相加(按行求和)
第三步:将相加后得到的向量中每个元素除以n即可得到权重向量
下图公式说明上面的三个步骤:
方法2:几何平均法求权重
几何平均法求权重也有三步:
第一步:将A的元素按照行相乘得到一个新的列向量
第二步:将新的向量的每个分量开n次方
第三步:对该列向量进行归一化即可得到权重向量
下图公式说明上面的三个步骤:
方法3:特征值法求权重
拿景色举个例子:
注意,权重一定要进行归一化处理:
苏杭 = 1 /(1+0.5+0.25)
北戴河 = 0.5 /(1+0.5+0.25)
桂林 = 0.25 /(1+0.5+0.25)假如我们的判断矩阵一致性可以接受,那么我们可以仿照一致矩阵权重的求法。
第一步:求出矩阵A的最大特征值以及其对应的特征向量
第二步:对求出的特征向量进行归一化即可得到我们的权重
最大特征值为3.0055 , 一致性比例 CR = 0.0053
对应的特征向量:[‐0.8902,‐0.4132,‐0.1918]
对其归一化:[0.5954,0.2764,0.1283]
将计算结果填入权重表:
然后逐一将每一个指标的数据填进去就行了。
求上面这个判断矩阵的权重:
汇总结果得到权重矩阵:
我们可以得到使用特征值法求得的权重矩阵,根据此矩阵,我们可以计算出每个旅游景点的得分。
计算各方案的得分:
苏杭得分:
类似的,我们可以得到北戴河得分为0.245,桂林得分为0.455.
因此小明最佳的旅游景点应该是桂林。
注意:这里用EXCEL计算可大大减轻工作量哦。
要点: F4可以锁定单元格。
二、模型总结
层次分析法第一步:
1.分析系统中各因素之间的关系,建立系统的递阶层次结构.
准则层—方案层的判断矩阵的数值要结合实际来填写,如果题目中有其他数据,可以考虑利用这些数据进行计算。例如:有一个指标是交通安全程度,现在要比较开放小区、半开放小区和封闭小区,而且你收集到了这些小区车流量的数据,那么就可以根据这个数据进行换算作为你的判断矩阵。
注意:如果你用到了层次分析法,那么这个层次结构图要放在你的建模论文中哦。
层次图如何制作呢?
①使用PPT自带的功能SmartArt生成;
②使用专业软件:亿图图示;
注:同类型的软件如Visio也是可以的~如果不想下载软件,可以使用在线的ProcessOn,也很方便。
层次分析法第二步:
2. 对于同一层次的各元素关于上一层次中某一准则的重要性进行两两比较,构造两两比较矩阵(判断矩阵)。
接下来构造判断矩阵:
上面这个矩阵的名称是:判断矩阵O — C
任何评价类模型都具有主观性。
理想:采用专家群体判断
现实:几乎都是自己填的层次分析法第三步:
- 由判断矩阵计算被比较元素对于该准则的相对权重,并进行一致性检验(检验通过权重才能用)。三种方法计算权重:
(1)算术平均法(2)几何平均法(3)特征值法强烈建议大家在比赛时三种方法都使用:
以往的论文利用层次分析法解决实际问题时,都是采用其中某一种方法求权重,而不同的计算方法可能会导致结果有所偏差。为了保证结果的稳健性,本文采用了三种方法分别求出了权重后计算平均值,再根据得到的权重矩阵计算各方案的得分,并进行排序和综合分析,这样避免了采用单一方法所产生的偏差,得出的结论将更全面、更有效。注:
(1)一致矩阵不需要进行一致性检验,只有非一致矩阵的判断矩阵才需要进行一致性检验;(2)在论文写作中,应该先进行一致性检验,通过检验后再计算权重,视频中讲解的只是为了顺应计算过程。
层次分析法第四步:
4 . 根据权重矩阵计算得分,并进行排序。
层次分析法可以参考优秀论文的做法,例如:
① 【2008年国赛B题一等奖】关于高等教育学费标准的评价及建议;
②【2016年国赛MATLAB创新奖B题】中国人民大学‐小区开放道路通行影响
层次分析法的一些局限性:
(1)评价的决策层不能太多,太多的话n会很大,判断矩阵和一致矩阵差异可能会很大。
注:平均随机一致性指标RI的表格中n最多是15。
(2)如果决策层中指标的数据是已知的,那么我们如何利用这些数据来使得评价的更加准确呢?
这个得自己思考一下。
三、模型Matlab代码详解
1.Matlab基本的小常识
分号的作用、注释的快捷键、clc和clear、disp和input等等。
(1)在每一行的语句后面加上分号(一定要是英文的哦;中文的长这个样子;)表示不显示运行结果,例如a = 3;
(2)多行注释:选中要注释的若干语句,快捷键Ctrl+R
(3)取消注释:选中要取消注释的语句,快捷键Ctrl+T
(4)clear可以清楚工作区的所有变量
(5)clc可以清除命令行窗口中的所有文本,让屏幕变得干净
(6)clear;clc 一起使用,起到“初始化”的作用,防止之前的结果对新脚本文件(后缀名是 .m)产生干扰。说明分号也用于区分行。
(7)输出和输入函数(disp 和 input)
disp函数:matlab中disp()就是屏幕输出函数,类似于c语言中的printf()函数
disp(‘我是花花,大家好鸭~~’)
input函数:一般我们会将输入的数、向量、矩阵、字符串等赋给一个变量,这里我们赋给A
A = input(‘请输入A:’);
B = input(‘请输入B:’)
注意观察工作区,并体会input后面加分号和不加分号的区别
(8)matlab中两个字符串的合并有两种方法
(a)strcat(str1,str2……,strn)
strcat(‘字符串1’,‘字符串2’)
(b)[str 1,str 2,……, str n]或[str1 str2 …… strn]
[‘字符串1’ ‘字符串2’]
[‘字符串1’,‘字符串2’]
一个有用的字符串函数:num2str 将数字转换为字符串
c = 100
num2str©
disp([‘c的取值为’ num2str©])
disp(strcat(‘c的取值为’, num2str©))
2. sum函数
(1)如果是向量(无论是行向量还是列向量),都是直接求和。
E = [1,2,3]
sum(E)
E = [1;2;3]
sum(E)(2)如果是矩阵,则需要根据行和列的方向作区分。
clc
E = [1,2;3,4;5,6]
a=sum(x); %按列求和(得到一个行向量)
a = sum(E)
a = sum(E,1) %1是按列求和(得到一个列向量)
% a=sum(x,2); %2是按行求和(得到一个列向量)
a = sum(E,2)
% a=sum(x(😃); %对整个矩阵求和
a = sum(sum(E))
a = sum(E(😃)
3. Matlab中如何提取矩阵中指定位置的元素?
(1)取指定行和列的一个元素(输出的是一个值)
clc; 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];
A
A(2,1)
A(3,2)(2)取指定的某一行的全部元素(输出的是一个行向量)
clc; A
A(2,:)
A(5,:)(3)取指定的某一列的全部元素(输出的是一个列向量)
clc; A
A(:,1)
A(:,3)(4)取指定的某些行的全部元素(输出的是一个矩阵)
clc; A
A([2,5]😅 % 只取第二行和第五行(一共2行)
A(2:5,:) % 取第二行到第五行(一共4行)
A(2:2:5,:) % 取第二行和第四行 (从2开始,每次递增2个单位,到5结束)
1:3:10
10👎1
A(2:end,:) % 取第二行到最后一行
A(2:end-1,:) % 取第二行到倒数第二行(5)取全部元素(按列拼接的,最终输出的是一个列向量)
clc; A
A(😃
4. size函数
clc;
A = [1,2,3;4,5,6]
B = [1,2,3,4,5,6]
size(A)
size(B)
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
2:5,:) % 取第二行到第五行(一共4行)
A(2:2:5,:) % 取第二行和第四行 (从2开始,每次递增2个单位,到5结束)
1:3:10
10👎1
A(2:end,:) % 取第二行到最后一行
A(2:end-1,:) % 取第二行到倒数第二行(5)取全部元素(按列拼接的,最终输出的是一个列向量)
clc; A
A(😃
4. size函数
clc;
A = [1,2,3;4,5,6]
B = [1,2,3,4,5,6]
size(A)
size(B)
[外链图片转存中…(img-5kpotoLQ-1714324382325)]
[外链图片转存中…(img-QdaXE2pi-1714324382326)]
[外链图片转存中…(img-YFrL6nVK-1714324382326)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新