层次分析法代码笔记

层次分析法

一、核心

在层次分析法中,通过 算术平均法、几何平均法、特征值法 计算指标权重,再通过 一致性检验 确保判断矩阵逻辑合理,为多准则决策提供量化依据。

二、代码

(一)一致性检验(判断矩阵合理性)

python 复制代码
import numpy as np

# 1. 定义判断矩阵
A = np.array([[1, 2, 3, 5], [1/2, 1, 1/2, 2], [1/3, 2, 1, 1/2], [1/5, 1/2, 1/2, 1]])

# 2. 获取矩阵阶数(指标数量)
n = A.shape[0]  

# 3. 计算特征值与特征向量
eig_val, eig_vec = np.linalg.eig(A)  
Max_eig = max(eig_val)  # 提取最大特征值

# 4. 计算一致性指标
CI = (Max_eig - n) / (n - 1)  

# 5. 平均随机一致性指标(查表值)
RI = [0, 0.0001, 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]  
CR = CI / RI[n-1]  # 一致性比率

# 6. 输出结果与判断
print(f'一致性指标CI={CI}')
print(f'一致性比例CR={CR}')
if CR < 0.1:
    print('CR<0.1,判断矩阵一致,可继续计算权重!')
else:
    print('CR≥0.1,矩阵需调整!')
  • 关键逻辑 :通过最大特征值与 n 的关系,量化矩阵一致性。CR<0.1 是判断矩阵合理的标准。

(二)算术平均法求权重

python 复制代码
import numpy as np

# 1. 定义判断矩阵
A = np.array([[1, 2, 3, 5], [1/2, 1, 1/2, 2], [1/3, 2, 1, 1/2], [1/5, 1/2, 1/2, 1]])

# 2. 计算每列和(按列求和)
ASum = np.sum(A, axis=0)  

# 3. 列归一化(矩阵元素÷对应列和)
Stand_A = A / ASum  

# 4. 按行求和(归一化后行累加)
ASumr = np.sum(Stand_A, axis=1)  

# 5. 计算权重(行和÷指标数)
weights = ASumr / A.shape[0]  

print('算术平均法权重:', weights)
  • 步骤解析:先归一化消除量纲,再通过行和平均分配权重,计算简单、直观,适合初步权重分配。

(三)几何平均法求权重

python 复制代码
import numpy as np

# 1. 定义判断矩阵
A = np.array([[1, 2, 3, 5], [1/2, 1, 1/2, 2], [1/3, 2, 1, 1/2], [1/5, 1/2, 1/2, 1]])

# 2. 按行求元素乘积
prod_A = np.prod(A, axis=1)  

# 3. 计算行乘积的 n 次根(n 是指标数)
prod_n_A = np.power(prod_A, 1/A.shape[0])  

# 4. 归一化(根值÷所有根值的和)
weights = prod_n_A / np.sum(prod_n_A)  

print('几何平均法权重:', weights)
  • 核心思想:通过行元素乘积的开方,平衡指标间的相对重要性,削弱极端值影响

(四)特征值法求权重

python 复制代码
import numpy as np

# 1. 定义判断矩阵
A = np.array([[1, 2, 3, 5], [1/2, 1, 1/2, 2], [1/3, 2, 1, 1/2], [1/5, 1/2, 1/2, 1]])

# 2. 计算特征值与特征向量
eig_values, eig_vectors = np.linalg.eig(A)  

# 3. 找到最大特征值的索引
max_index = np.argmax(eig_values)  

# 4. 提取对应特征向量并归一化
max_vector = eig_vectors[:, max_index]  
weights = max_vector / np.sum(max_vector)  

print('特征值法权重:', weights)
  • 理论依据:一致矩阵的特征向量对应权重,通过最大特征值对应的特征向量计算
相关推荐
荣码9 小时前
GraphRAG:普通RAG只能回答"点"的问题,我踩了4个坑才搞懂
java·python
金銀銅鐵20 小时前
[Python] 基于欧几里得算法,实现分数约分计算器
python·数学
Lyn_Li1 天前
Kaggle Top 5 | 198只股票、200条数据的金融预测——BattleFin高分方案从零复现
python·kaggle·比赛复盘·金融预测
小九九的爸爸1 天前
前端想要入门Agent开发,要具备哪些Python基础?
python·agent·ai编程
阿耶同学1 天前
手把手教你用 LangGraph 搭建三层嵌套 Agent 架构
python·程序员
花酒锄作田2 天前
Pydantic校验配置文件
python
hboot2 天前
AI工程师第四课 - 深度学习入门
pytorch·python·神经网络
ZhengEnCi2 天前
P2M-Matplotlib折线图完全指南-从数据可视化到趋势分析的Python绘图利器
python·matlab·数据可视化
ZhengEnCi2 天前
P2L-Matplotlib饼图完全指南-从数据可视化到图表定制的Python绘图利器
python·matlab
曲幽2 天前
你的REST接口还在“过度投喂”数据吗?——FastAPI + GraphQL实战避坑指南
python·fastapi·web·graphql·route·cors·rest·strawberry