CRITIC客观赋权法求各个变量的权重python代码
时间: 2023-07-10 20:13:51 浏览: 228
CRITIC客观赋权法是一种CRITIC的改进算法,用于在评价指标具有客观权重时求解各个变量的权重。具体步骤如下:
1. 确定评价指标集合,包括影响变量和被影响变量。
2. 确定各个评价指标的客观权重。
3. 构建判别矩阵,将每个评价指标按照其重要性进行两两比较,得到判别矩阵。
4. 计算每个评价指标的权重,采用CRITIC客观赋权法计算每个变量的权重。
5. 验证权重结果,检验判别矩阵是否满足一致性要求,如不满足则需要重新调整调整判别矩阵。
具体计算步骤如下:
1. 对判别矩阵的每一行进行归一化处理,即将每一行的元素都除以该行元素之和,得到标准化矩阵。
2. 计算平均化矩阵,即将标准化矩阵的每一列乘以其客观权重,再求平均,得到平均化矩阵。
3. 计算权重向量,即将平均化矩阵的每一行元素之和除以矩阵的行数,得到权重向量。
4. 计算一致性指标,即计算判别矩阵的特征向量与权重向量的一致性指标,如一致性比率CR小于0.1,则认为判别矩阵满足一致性要求,否则需要重新调整判别矩阵。
5. 检验结果,将权重向量的元素按照大小排序,即可得到各个变量的权重。
下面是使用Python实现CRITIC客观赋权法求解各个变量的权重的代码:
```python
import numpy as np
# 定义判别矩阵
D = np.array([[1, 3, 5],
[1/3, 1, 3],
[1/5, 1/3, 1]])
# 定义客观权重
w0 = np.array([0.3, 0.5, 0.2])
# 归一化处理
n = D.shape[0]
A = np.zeros((n, n))
for i in range(n):
A[i, :] = D[i, :] / np.sum(D[i, :])
# 计算平均化矩阵
Aw = np.zeros((n, n))
for j in range(n):
Aw[:, j] = A[:, j] * w0[j]
w = np.mean(Aw, axis=0)
# 计算一致性指标
lambda_max = np.max(np.linalg.eigvals(D))
CI = (lambda_max - n) / (n - 1)
RI = np.array([0, 0, 0.58])
CR = CI / RI[n-1]
# 输出结果
if CR < 0.1:
print('一致性指标CR={:.2f},通过检验'.format(CR))
print('各变量的权重为:', w)
else:
print('一致性指标CR={:.2f},未通过检验,请重新调整判别矩阵'.format(CR))
```
其中,`D`为判别矩阵,`w0`为评价指标的客观权重向量,`n`为矩阵的阶数,`A`为标准化矩阵,`Aw`为加权标准化矩阵,`w`为权重向量,`lambda_max`为特征值的最大值,`CI`为一致性指标,`RI`为随机一致性指标,`CR`为一致性比率。根据CR是否小于0.1,判断判别矩阵是否满足一致性要求。如果满足,输出各个变量的权重。
阅读全文