好的,今天继续研究评价类模型的相关算法。实不相瞒,虽然我才写到第二个算法,但是已经听了几十节课了,清风老师的课程确实蛮不错的,实用性比较强。相关的模型、算法基本上越往后越难,所以珍惜现在比较容易理解的评价类模型吧hhh。
在这里要说明一下,小白本白只是一个即将大三的本科生,目前比较容易理解的模型我还能写得完整一些。之后很多模型会涉及较为复杂的数学推导,我可能很难完整地从原理去描述了,只能着重于实际应用方面。请各位谅解啦。
ok,我们继续学习评价类模型算法。
(注:以下案例均来自我所听的网课)
上一篇文章我们介绍了一个简单又实用的评价打分方法——层次分析法。同时我们也提到了,层次分析法有一些缺陷之处。首先就是主观性较强,层次分析法往往是专家用来打分的方法,但建模比赛中没有专家,判断矩阵只能我们自己填;其次,当指标或者方案层数量较多时,我们两两比较得出的判断矩阵和一致矩阵可能会出现较大的差异(想一想你的心理预期,有多符合那个乘法关系),判断矩阵的填写也会比较麻烦(例如要问
看看这个题目
给出
TOPSIS算法是解决上述问题的一个比较合适的算法,其全称是
我们依然从一个简单的问题入手。小明同学考上南大之后,不知不觉就迎来了第一次高数考试,他及其舍友的分数如下。
现在我们要根据他们的成绩,给他们进行打分,要求分数可以合理地表达其成绩的高低。hhh可能会有人觉得这个问题比较奇怪,成绩本身就可以作为所谓的分数了,实在不行我们还有GPA,怎么还要打分?因为这只是一个例子,事实上在许多实际问题中,我们只有数据,例如上面水质问题的含氧量,PH值,并没有这样一个分数。再者,实际问题中有很多的指标,其量纲经常不同,但我们需要通过这些数据得出一个综合的分数。因此我们很有必要对数据进行一定的处理,同时找到一个综合打分的方法。
所以我们有一个很直接的想法,就是对分数进行归一化处理,例如清风的最后得分就是
这里提出一个小问题,我们把PH值作为衡量水质的一个标准,其范围是0~14,PH=7时最好,所以PH=7时相关指标得分应该最高。这时候就不能像成绩那样,直接求和算比重了吧,那应该怎么处理呢?
ok,我们继续。上述的操作只是对数据进行了处理,我们还是需要一个打分的标准。有同学就会想到,赋权,然后打分。这就回到了我们层次分析法的内容。还是那些问题,主观性比较强,指标太多时操作起来不准确且麻烦,对数据的利用不充分等等。
这里就可以引入TOPSIS的想法了。事实上我们的目的是对方案给出一个排序,只要数据有了,我们就可以根据这些数据,构造出一个所有方案组成的系统中的理想最优解和最劣解(我感觉最劣解和理想不搭,就直接用最劣解称呼吧)。而TOPSIS的想法就是,我们通过一定的计算,评价系统中任何一个方案距离理想最优解和最劣解的综合距离。如果一个方案距离理想最优解越近,距离最劣解越远,我们就有理由认为这个方案更好。那理想最优解和最劣解又是什么呢?很简单,理想最优解就是该理想最优方案的各指标值都取到系统中评价指标的最优值,最劣解就是该理想最劣方案的各指标值都取到系统中评价指标的最劣值。这么说可能不是很清楚,举个例子。
如果我们只有一个指标,例如上图中的成绩,那么理想最优解就是99分,注意,不是满分100分,理想最优解中的数据都是各方案中的数据,而不要选择方案中没有的数据。不然如果是GDP这种上不封顶的指标,理想最优取值岂不是正无穷了……同理,该系统中的最劣解是60。
那如果有两个指标呢?例如我们引入一个“与他人争吵的次数”,用来衡量情商,给出相应的数据表格。
按照我们的一般想法,与他人争吵的次数应该是越小越好,所以我们可以用向量表达这个系统中的理想最优解,也就是
现在我们知道了如何取得理想最优解和最劣解,那如何衡量某一个方案与理想最优解和最劣解的综合距离呢?TOPSIS用下面一个表达式进行衡量:
相信到这里大家对于TOPSIS的基本思想已经差不多理解了,之后就是实际操作的问题了。我们都知道,“方案 - 最劣解”这种东西只是方便理解,确实也是我编出来的,实际中方案根本不能做差。所以我们只能用数据来求出这么一个距离。对于某一个指标的数据,我们可以用
首先,我们解决第一个问题,有些指标的数据越大越好,有些则是越小越好,有些又是中间某个值或者某段区间最好。我们可以对其进行“正向化处理”,使指标都可以像考试分数那样,越大越好。
我们可以把指标分为四类,如下表所示。
所谓的正向化处理,就是将上述的四种指标数据进行处理,将其全部转化为极大型指标数据,这样我们计算时问题就少一点,码代码时也更加统一。
对于极小型指标,例如费用,争吵次数,我们可以用
对于中间型指标,如果其最佳数值是
对于区间型指标,如果其最佳区间是
进行转化,示例如下。
至此,我们已经将所有的数据都转化为极大型数据了,可以很好地使用
现在我们已经对数据进行了相应的处理,可以计算每一个方案的的得分了,也就是所谓的距离。由于我们一个方案具有多个指标,因此我们可以用向量
之后我们就可以从中取出理想最优解和最劣解了,经过了正向化处理和标准化处理的评分矩阵
(
现在我们可以计算得分了,之前我们的计算公式是
嗯,我就默认大家都同意这个说法了。我们继续计算得分,对于第
这个时候我们就有了每个方案的分数了,按分数排排序,就知道哪个方案好一点儿哪个方案次一点儿了。还可以按照这个得分再进行一次归一化,不过我觉得没什么必要了。
嗯,基本部分讲完啦。
总结一下。使用TOPSIS算法的一个先决条件就是要有数据,最好全部是定量数据,如果是定性数据或者定序数据,但能够分别优劣,也可以按照定量数据来处理。之后就开始操作:
a.将原始数据矩阵正向化。 也就是将那些极小性指标,中间型指标,区间型指标对应的数据全部化成极大型指标,方便统一计算和处理。
b.将正向化后的矩阵标准化。 也就是通过标准化,消除量纲的影响。
c.计算得分并排序 。公式就是
这次好像还没有给一个完整的解题过程,嗯,我就把PPT里的小案例放在这里供大家参考。 这是原始数据矩阵
我们对其进行正向化
我们再对其进行标准化
最后计算得分给出排名
嗯,这个例子告诉我们,成绩很重要,但是情商更重要hhh。小王虽然只考了60分,但也及格了,而且他从不与人争吵,所以我们可以给他一个最好的评价hhh。
其实我们可以看到TOPSIS的一个特点,即它使用理想最优解和最劣解作为评判方案的依据时,实际上就是在方案的系统内部进行评价,这样的评价手段也可以更好的表达出系统中方案与方案之间的差距,也比较充分地利用了数据所包含的信息。(我随便编的,别信)
TOPSIS是不是又简单又实用呢?其实我们还可以进行一点点儿的拓展,不想打字了,看下图。
我们可以看到,在计算距离时,我们其实默认每个指标的权重是相同的,但实际问题中,不同的指标重要程度可能是不一样的。例如评奖学金的时候,成绩往往是最重要的,之后还有参与活动分,志愿服务分等等,他们的权重又低一点。因此,在实际的应用中,我们也可以给指标进行赋权,将权重放到计算距离的公式中。如图。
带上了权重之后,不同的指标发挥的影响就不一样了,带权重的评价也往往是实际生活中很常见的一种评价方式。
那在建模中如何确定权重呢?如果是日常生活向的评价,我们可以使用层次分析法,结合常识给出。如果是比较专业的评价指标,我们可以查询资料,看看别人怎么研究的。还有一种方法叫熵权法,也是这套课程的内容,不过限于篇幅,就留到之后再提吧。
TOPSIS法有什么局限性呢?其实也是有的,例如没有数据你就行不通了吧hhh。不过在实际建模中,倒也不必考虑太多的局限性,知道每个模型的适用条件就好了。到时候见招拆招,增删查改,尽力而为就好了。一个没有参加过比赛的小白说这些是不是有点儿不妥……不管了,反正就是碰到什么题用对应的模型,实在不行就试着综合综合,总能有个结果的hhh
嗯,就这样,拜拜~
我把PPT里的题目也放在这里,应该没问题。哔哩哔哩上有作业讲解的。
(如果文章有什么错误欢迎指出毕竟我就是个沙雕的小白orz)
这两天知乎给我推送了一些数学建模相关的问答,其中一个是数学建模相关书籍。我把高赞回答推荐的书的电子版找了一下,如果需要的话,在微信公众号“我是陈小白”后台回复“数学建模书籍”即可。