评价类算法之ahp层次分析法(让AHP帮你选一个最符合你的礼物)
评价类算法之ahp层次分析法(让AHP帮你选一个最符合你的礼物)这几个礼物应该是目前最热门的吧,现在鲜花都不能当面送了有点可惜,当然大家可以根据自己想送的礼物来衡量。方案准则当然大家也可以自行选择不同的考虑因素。第三步也就是供我们选择具体送的哪种类型的礼物,如巧克力、鲜花、口红、化妆品、游戏(、手表包包等等。
前言送什么礼物才能让女人满意,让男人苦不堪言。像我这种有选择恐惧症的,每当节日来临一堆东西摆在面前都不知道挑啥(bushi,确实我还没有女友,落泪)。干脆就整个AHP帮咱挑选一个适合送给对象或者自己(也要爱自己喔~)的礼物,AHP原理其实都不需要理解,咱们会实际运用就贴切了。
一、建立层次结构模型1.确定目标层
第一步我们需要确定我们的目标是什么,是选择个高端大气上档次的礼物呢,还是选择个低调奢华有内涵的礼物。 确定了我们需要挑选什么礼物的目标,会影响后续挑选礼物品质的打分。所以我们需要确定要挑选哪种品质的礼物。像我这种纯纯码农来说一般喜欢那种不贵且看上去很有内涵也上档次的礼物(是不是要求太高了)。当然大家可以自己决定想要什么,这里我先根据本人的目标来,大家看一遍后自己就能做出来了:
目标
2.确定准则层第二步我们需要思考一些礼物的属性,也就是我们一般衡量礼物的价值要考虑到的东西。比如贵不贵啊、颜值咋样、精准小巧、实用性高啊等等。这些属性影响到我们最终选择什么礼物,当然就是建立在各个因素对比之上。首先我们确定要选择礼物的考虑品质:
准则
当然大家也可以自行选择不同的考虑因素。
3.确定方案层第三步也就是供我们选择具体送的哪种类型的礼物,如巧克力、鲜花、口红、化妆品、游戏(、手表包包等等。
方案
这几个礼物应该是目前最热门的吧,现在鲜花都不能当面送了有点可惜,当然大家可以根据自己想送的礼物来衡量。
这样一来我们就建立了层次模型了:
总体架构
二、构造判断(成对比较)矩阵1.构建对比矩阵咱们提出了考虑因素和礼物当然要进行对比了,这里我们不是把所有因素加起来一起比较,而是两两进行比较:
- 不把所有因素放在一起比较 而是两两相互比较。
- 对此时采用相对尺度 以尽可能减少性质不同的诸因素相互比较的困难 以提高准确度。
这里我们需要用到两两因素对比之间衡量二者重要性的标度:
现在我们要根据考虑因素来衡量一些各个因素之间到底哪个对于我们最终选择的目标最值得考虑:
价格 |
实用性 |
颜值 |
精致 |
数目 | |
价格 |
1 |
1/4 |
1/2 |
2 |
3 |
实用性 |
4 |
1 |
5 |
2 |
5 |
颜值 |
2 |
1/5 |
1 |
1 |
2 |
精致 |
1/2 |
1/2 |
1 |
1 |
5 |
数目 |
1/3 |
1/5 |
1/2 |
1/5 |
1 |
这里需要自己主观对比打分。
2.获取权向量接下来我们需要通过列向量归一化和行向量归一化获取权向量,过程其实很简单并不复杂:
(1).列向量归一化我们依据矩阵来看:矩阵为主
行
列,这第一行第一列就是
,那么列向量归一化运算就是把第一行第一个元素进行:
根据此运算我们把上述矩阵进行列向量归一化:
import numpy as np
a=np.array([1 4 2 0.5 1/3])
b=np.array([1/4 1 0.2 0.5 0.2])
c=np.array([1/2 5 1 1 0.5])
d=np.array([2 2 1 1 0.2])
e=np.array([3 6 2 5 1])
a/a.sum()
b/b.sum()
c/c.sum()
d/d.sum()
e/e.sum()
价格 |
实用性 |
颜值 |
精致 |
数目 | |
价格 |
|
|
|
|
|
实用性 |
|
|
|
|
|
颜值 |
|
|
|
|
|
精致 |
|
|
|
|
|
数目 |
|
|
|
|
|
行和归一化为每行的数相加除以每行的个数,这里进行降维转为i行1列的矩阵,计算公式为:
ep=np.array([a b c d e]).T
np.sum(ep axis=1)/5
array([0.16109798 0.45525528 0.15045596 0.17535918 0.05783161])
这便得到了我们的权向量。
3.计算特征值我们假设特征值为,则线性代数特征公式为
,其中为权向量。计算
a=np.array([1 4 2 0.5 1/3])
b=np.array([1/4 1 0.2 0.5 0.2])
c=np.array([1/2 5 1 1 0.5])
d=np.array([2 2 1 1 0.2])
e=np.array([3 6 2 5 1])
em=np.array([a b c d e])
a=a/a.sum()
b=b/b.sum()
c=c/c.sum()
d=d/d.sum()
e=e/e.sum()
ep=np.array([a b c d e]).T
ex=np.sum(ep axis=1)/5
lamda=np.matmul(ex em)/ex
lamda.sum()*1/5
得到最大特征根是:
5.476674227382576
三、一致性检验
现在我们需要巩固计算出来的成果,是否具有科学性和可靠性。这时候我们需要进行一致性检验,验证我们的模型是否具有说服力。
一致性检验原理: 检验我们构造的判断矩阵和一致矩阵是否有太大的差别。
1.第一步计算我们需要计算衡量一致性的指标CI:
- CI 有完全的一致性;
- CI接近于0,有满意的一致性;
- CI越大,不一致越严重
为了衡量CI的大小,引入随机一致性指标RI
2.第二步计RIRI的值根据n的大小来决定:
RI的值
3.第三步计算CR一般 当一致性比率
时 认为A的不一致程度在容许范围之内,有满意的一致性 通过一致性检验。可用其归一化特征向量作为权向量 否则要重新构造成对比较矩阵A 对加以调整。
这里我们的判断矩阵计算结果为:
最大特征根 |
CI |
RI |
CR |
结果 |
5.4766 |
0.1116 |
1.12 |
0.0996 |
通过 |
通过一次性检验。
四、填充权重矩阵接下来我们要根据三种选择方案:口红、巧克力和手工DIY礼品来进行逐个影响因素对比。计算方法是和计算准则层方法一样的,这里便不再逐步进行计算:
价格 |
口红 |
巧克力 |
DIY |
口红 |
1 |
3 |
3 |
巧克力 |
1/3 |
1 |
1 |
DIY |
1/3 |
1 |
1 |
价格 |
口红 |
巧克力 |
DIY |
权重(权向量) |
0.6 |
0.2 |
0.2 |
最大特征根 |
CI |
RI |
CR |
结果 |
3 |
0 |
0.52 |
0 |
通过 |
实用性 |
口红 |
巧克力 |
DIY |
口红 |
1 |
5 |
7 |
巧克力 |
1/5 |
1 |
3 |
DIY |
1/7 |
1/3 |
1 |
实用性 |
口红 |
巧克力 |
DIY |
权重(权向量) |
0.7306 |
0.1884 |
0.0810 |
最大特征根 |
CI |
RI |
CR |
结果 |
3.0649 |
0.324 |
0.52 |
0.0624 |
通过 |
接下来大家可自行对比打分,这里不逐个演示了,直接进行填充权重矩阵:
指标权重 |
口红 |
巧克力 |
DIY | |
价格 |
0.1610 |
0.6 |
0.2 |
0.2 |
实用性 |
0.4552 |
0.7306 |
0.1884 |
0.0810 |
礼物颜值 |
0.1504 |
0.1047 |
0.2583 |
0.6370 |
小巧精致 |
0.1753 |
0.2583 |
0.1047 |
0.6370 |
礼物数量 |
0.0578 |
0.1429 |
0.7143 |
0.1429 |
最终计算出各个方案的得分:
口红:
巧克力:
DIY:0.2848
总结不管是男码,女码友,都应该收到一份示爱,也希望各位单身码友今年脱单,不单身的码友和另一半感情越来越好,不管在什么地方都有人爱你。