2023年2月11日,备赛美赛复习建模需要使用的算法。在复习层次分析法的过程可以发现,层次分析法建立判断矩阵时具有强主观性,这个时候就需要建立一致性检验,对模型的差异性进行评估。
计算一致性比例:
其中:
为判断矩阵的最大特征值,n为指标数(即判断矩阵的行数,RI为平均随机一致性指标通过查表可得到n对应的RI(不知道是谁发明的指标,很多文献都在用)
如果一致性比例CR = 0,说明判断矩阵是一致矩阵,不会出现任何矛盾的情况
如果一致性比例CR < 0.1,可以认为判断矩阵的“差异”不大,通过一致性检验
如果一致性比例CR >= 0.1,需要修改判断矩阵,知道CR < 0.1
了解了一致性检验的建立方法,可以发现判断矩阵的最大特征值是不知道的,因此通过使用python 来计算最大特征值:
import numpy as np
# 输入特征矩阵
arrays = np.array([[1, 1/2, 4, 3, 3],
[2, 1, 7, 5, 5],
[1/4, 1/7, 1, 1/2, 1/3],
[1/3, 1/5, 2, 1, 1],
[1/3, 1/5, 3, 1, 1]])
#求解特征值即特征向量
lamda = np.linalg.eig(arrays)
"""
(array([ 5.07208441+0.j , -0.03070462+0.60082743j,
-0.03070462-0.60082743j, -0.00533758+0.05475206j,
-0.00533758-0.05475206j]),
array([[-0.46582183+0.j , 0.44186009+0.27105866j,
0.44186009-0.27105866j, -0.36716196+0.2414553j ,
-0.36716196-0.2414553j ],
[-0.84086331+0.j , 0.77734237+0.j ,
0.77734237-0.j , 0.85752776+0.j ,
0.85752776-0.j ],
[-0.09509743+0.j , -0.02000217-0.15570733j,
-0.02000217+0.15570733j, -0.0190312 +0.00635723j,
-0.0190312 -0.00635723j],
[-0.17329948+0.j , -0.02610008+0.07828144j,
-0.02610008-0.07828144j, -0.07374757-0.21459801j,
-0.07374757+0.21459801j],
[-0.19204866+0.j , -0.28288299+0.12469508j,
-0.28288299-0.12469508j, 0.07483506+0.11850604j,
0.07483506-0.11850604j]]))
第一个array是特征值
第二个array是对应的特征向量
这里我们只需要第一个
"""
index = np.argmax(lamda[0])
lamda_max = np.real(lamda[0][index])
print(f'最大特征值为:{lamda_max}')
"""
大特征值为:5.072084408570216
"""
将计算结果代入公式就可以得出一致性比例啦。
欢迎大家参考学习交流。