AHP层次分析法Python代码:让AHP帮你选一个最符合你的礼物

简介: AHP层次分析法Python代码:让AHP帮你选一个最符合你的礼物

前言


送什么礼物才能让女人满意,男人苦不堪言。像我这种有选择恐惧症的,每当节日来临一堆东西摆在面前都不知道挑啥(bushi,确实我还没有女友,落泪)。干脆就整个AHP帮咱挑选一个适合送给对象或者自己(也要爱自己喔~)的礼物,AHP原理其实都不需要理解,咱们会实际运用就贴切了,想要理解更多的欢迎看看我的博客有详解喔:层次分析法(AHP)原理以及应用。废话不多说了咱们开始吧!


一、建立层次结构模型


1.确定目标层


第一步我们需要确定我们的目标是什么,是选择个高端大气上档次的礼物呢,还是选择个低调奢华有内涵的礼物。 确定了我们需要挑选啥礼物的目标,会影响后续挑选礼物品质的打分。所以我们需要确定要挑选哪种品质的礼物。像我这种纯纯码农来说一般喜欢那种不贵且看上去很有内涵也上档次的礼物(是不是要求太高了)。当然大家可以自己决定想要什么,这里我先根据本人的目标来,大家看会一遍后自己就能做出来了:


ed6c71514f5d4349860308b03b78339b.png

2.确定准则层


第二步我们需要思考一些礼物的属性,也就是我们一般衡量礼物的价值要考虑到的东西。比如贵不贵啊、颜值咋样、精准小巧、实用性高啊等等。这些将属性影响到我们最终选择什么礼物,当然就是建立在各个因素对比之上。首先我们确定要选择礼物的考虑品质:


4b64691bc7ef4715b19bce91b060f1f1.png


当然大家也可以自行选择不同的考虑因素。


3.确定方案层


第三步也就是供我们选择具体送的哪种类型的礼物,如巧克力、鲜花、口红、化妆品、游戏(、手表包包等等。

b28709b8361e4a1faf806dd3d8b512b9.png

这几个礼物应该是目前最热门的吧,现在鲜花都不能当面送了有点可惜,当然大家可以根据自己想送的礼物来衡量。

这样一来我们就建立了层次模型了:

15c5ecdd36484006a3a4e711d3a3347d.png


二、构造判断(成对比较)矩阵


1.构建对比矩阵


咱们提出了考虑因素和礼物当然要进行对比了,这里我们不是把所有因素加起来一起比较,而是两两进行比较:


不把所有因素放在一起比较,而是两两相互比较。

对此时采用相对尺度,以尽可能减少性质不同的诸因素相互比较的困难,以提高准确度。

这里我们需要用到两两因素对比之间衡量二者重要性的标度:


baa284d56d1b4a71a0f6e29411b0eb4c.png


现在我们要根据考虑因素来衡量一些各个因素之间到底哪个对于我们最终选择的目标最值得考虑:



价格
实用性 颜值 精致 数目
价格 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).列向量归一化

我们依据矩阵来看:矩阵为gif.gifgif.gif列,这第一行第一列就是gif.gif,那么列向量归一化运算就是把第一行第一个元素进行:gif.gif


根据此运算我们把上述矩阵进行列向量归一化:


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()


image.png


(2).行和归一化


行和归一化为每行的数相加除以每行的个数,这里进行降维转为i行1列的矩阵,计算公式为:

gif.gif

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.计算特征值


我们假设特征值为gif.gif则线性代数特征公式为gif.gif其中gif.gif为权向量。

计算gif.gif

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.第一步计算gif.gif


我们需要计算衡量一致性的指标gif.gif

CI=0,有完全的一致性;

CI接近于0,有满意的一致性;

CI越大,不一致越严重

为了衡量CI的大小,引入随机一致性指标RI


2.第二步计gif.gif

gif.gif的值根据n的大小来决定:

2f5eb06c34704cba91f9f0f71cf4b669.png

3.第三步计算gif.gif

一般,当一致性比率时gif.gif,认为A的不一致程度在容许范围之内,有满意的一致性,通过一致性检验。可用其归一化特征向量作为权向量,否则要重新构造成对比较矩阵A,对gif.gif加以调整。

gif.gif


这里我们的判断矩阵计算结果为:


最大特征根 CI RI CR 结果
5.4766 0.1116 1.12 0.0996 通过


gif.gif通过一次性检验。


四、填充权重矩阵


接下来我们要根据三种选择方案:口红、巧克力和手工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


最终计算各个方案的得分:

口红:

gif.gif

巧克力:gif.gif


DIY:0.2848


什么!!!!!!!为什么是口红??当场昏倒


总结


不管是男码,女码友,都应该收到一份示爱,也希望各位单身码友今年脱单,不单身的码友和另一半感情越来越好,不管在什么地方都有人爱你,我爱你们。


44357586b0214403a7a1f935d457fedc.jpg



c47fc9c3c9854bf8b811a1717618c3d2.png



目录
相关文章
|
27天前
|
缓存 Rust 算法
从混沌到秩序:Python的依赖管理工具分析
Python 的依赖管理工具一直没有标准化,主要原因包括历史发展的随意性、社区的分散性、多样化的使用场景、向后兼容性的挑战、缺乏统一治理以及生态系统的快速变化。依赖管理工具用于处理项目中的依赖关系,确保不同环境下的依赖项一致性,避免软件故障和兼容性问题。常用的 Python 依赖管理工具如 pip、venv、pip-tools、Pipenv、Poetry 等各有优缺点,选择时需根据项目需求权衡。新工具如 uv 和 Pixi 在性能和功能上有所改进,值得考虑。
84 35
|
1月前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python实现基于矩阵分解的长期事件(MFLEs)时间序列分析
在现代数据分析中,高维时间序列数据的处理和预测极具挑战性。基于矩阵分解的长期事件(MFLEs)分析技术应运而生,通过降维和时间序列特性结合,有效应对大规模数据。MFLE利用矩阵分解提取潜在特征,降低计算复杂度,过滤噪声,并发现主要模式。相比传统方法如ARIMA和深度学习模型如LSTM,MFLE在多变量处理、计算效率和可解释性上更具优势。通过合理应用MFLE,可在物联网、金融等领域获得良好分析效果。
64 0
使用Python实现基于矩阵分解的长期事件(MFLEs)时间序列分析
|
28天前
|
数据采集 数据可视化 数据挖掘
金融波动率的多模型建模研究:GARCH族与HAR模型的Python实现与对比分析
本文探讨了金融资产波动率建模中的三种主流方法:GARCH、GJR-GARCH和HAR模型,基于SPY的实际交易数据进行实证分析。GARCH模型捕捉波动率聚类特征,GJR-GARCH引入杠杆效应,HAR整合多时间尺度波动率信息。通过Python实现模型估计与性能比较,展示了各模型在风险管理、衍生品定价等领域的应用优势。
251 66
金融波动率的多模型建模研究:GARCH族与HAR模型的Python实现与对比分析
|
18天前
|
并行计算 安全 Java
Python GIL(全局解释器锁)机制对多线程性能影响的深度分析
在Python开发中,GIL(全局解释器锁)一直备受关注。本文基于CPython解释器,探讨GIL的技术本质及其对程序性能的影响。GIL确保同一时刻只有一个线程执行代码,以保护内存管理的安全性,但也限制了多线程并行计算的效率。文章分析了GIL的必要性、局限性,并介绍了多进程、异步编程等替代方案。尽管Python 3.13计划移除GIL,但该特性至少要到2028年才会默认禁用,因此理解GIL仍至关重要。
97 16
Python GIL(全局解释器锁)机制对多线程性能影响的深度分析
|
1月前
|
数据可视化 算法 数据挖掘
Python时间序列分析工具Aeon使用指南
**Aeon** 是一个遵循 scikit-learn API 风格的开源 Python 库,专注于时间序列处理。它提供了分类、回归、聚类、预测建模和数据预处理等功能模块,支持多种算法和自定义距离度量。Aeon 活跃开发并持续更新至2024年,与 pandas 1.4.0 版本兼容,内置可视化工具,适合数据探索和基础分析任务。尽管在高级功能和性能优化方面有提升空间,但其简洁的 API 和完整的基础功能使其成为时间序列分析的有效工具。
80 37
Python时间序列分析工具Aeon使用指南
|
23天前
|
存储 缓存 Java
Python高性能编程:五种核心优化技术的原理与Python代码
Python在高性能应用场景中常因执行速度不及C、C++等编译型语言而受质疑,但通过合理利用标准库的优化特性,如`__slots__`机制、列表推导式、`@lru_cache`装饰器和生成器等,可以显著提升代码效率。本文详细介绍了这些实用的性能优化技术,帮助开发者在不牺牲代码质量的前提下提高程序性能。实验数据表明,这些优化方法能在内存使用和计算效率方面带来显著改进,适用于大规模数据处理、递归计算等场景。
58 5
Python高性能编程:五种核心优化技术的原理与Python代码
|
1月前
|
机器学习/深度学习 运维 数据可视化
Python时间序列分析:使用TSFresh进行自动化特征提取
TSFresh 是一个专门用于时间序列数据特征自动提取的框架,支持分类、回归和异常检测等机器学习任务。它通过自动化特征工程流程,处理数百个统计特征(如均值、方差、自相关性等),并通过假设检验筛选显著特征,提升分析效率。TSFresh 支持单变量和多变量时间序列数据,能够与 scikit-learn 等库无缝集成,适用于大规模时间序列数据的特征提取与模型训练。其工作流程包括数据格式转换、特征提取和选择,并提供可视化工具帮助理解特征分布及与目标变量的关系。
75 16
Python时间序列分析:使用TSFresh进行自动化特征提取
|
2月前
|
Python
课程设计项目之基于Python实现围棋游戏代码
游戏进去默认为九路玩法,当然也可以选择十三路或是十九路玩法 使用pycharam打开项目,pip安装模块并引用,然后运行即可, 代码每行都有详细的注释,可以做课程设计或者毕业设计项目参考
78 33
|
1月前
|
数据采集 缓存 API
python爬取Boss直聘,分析北京招聘市场
本文介绍了如何使用Python爬虫技术从Boss直聘平台上获取深圳地区的招聘数据,并进行数据分析,以帮助求职者更好地了解市场动态和职位需求。
|
2月前
|
JavaScript API C#
【Azure Developer】Python代码调用Graph API将外部用户添加到组,结果无效,也无错误信息
根据Graph API文档,在单个请求中将多个成员添加到组时,Python代码示例中的`members@odata.bind`被错误写为`members@odata_bind`,导致用户未成功添加。
52 10

热门文章

最新文章

推荐镜像

更多