三种客观赋权法——熵权法、变异系数法、CRITIC

1.数据处理

        在计算权值之前,需要对原始的数据进行一定的处理。

1.1 数据清洗

        数据的清洗是解决问题的第一步,包括缺失值处理和异常值处理两方面。

        对于缺失值,通常有三种可选的操作——删除、插补、不处理。其中插补的方式有很多,例如均值插补、固定值插补、最邻近插补、回归、插值(最常用)等等。

        对于异常值,处理方法与缺失值没有太大区别。相比缺失值,异常值处理最主要的部分在于如何判断数据是否异常。异常值判断可以通过箱型图、小波分析等方式来进行。

1.2 数据变换

        在进行数据变换之前,可以进行一些特征提取的工作,比如用PCA(主成分分析法)进行数据降维,得到独立的指标,这能够提高最终计算出的权值准确性。

        根据不同的需要,数据变换的具体方式也不同,常见的有归一化、标准化等。

        归一化:能够实现指标的一致化以及无量纲化。归一化操作针对不同类型的指标略有差异,但基本的原则是确定的,即把所有的指标转化为效益型指标。经过归一化后的数据相对均匀地分布在[0,1]区间内,相当于把数据压缩到0~1范围内。容易发现这个过程对于异常值是极度敏感的。

        标准化:标准化后的数据,其均值为0,标准差为1。

        个人感觉:归一化几乎是必做的,标准化、中心化等视具体情况而定。

不同方法的简单对比
 

图片来自:数据无量纲化处理(归一化VS标准化)

2. 三种赋权方法的比较

2.1 变异系数法

        变异系数法,也叫标准离差法,基本思想是计算每个指标下数据的方差Si,用Si除以各个Si的总和作为第i个指标的权重值,方差越大者权重也越大

        这种方法的优点是比较简单,也容易实现,能够有效区分各个指标。

        但它的缺点也是显著的——变异系数法的前提是各个指标重要性相当。指标方差越大只能说明该指标对不同方案的区分度很高,事实上并不能等同于指标的重要度。因此使用变异系数法时,对指标的选取有一定要求。

2.2 熵权法

        某种程度上与变异系数法很相似,但熵权法不是使用方差,而是用信息熵。

        可参考这篇博客:熵权法_wenxin_titanium的博客-CSDN博客_熵权法

2.3 CRITIC

        CRITIC的效果优于前两种方法,综合考虑了指标的对比强度与冲突性。但需要注意使用CRITIC则不宜进行标准化。

        可参考这篇博客:客观赋权法——CRITIC权重法_卖山楂啦prss的博客-CSDN博客_critic法

        

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,判断判别矩阵是否满足一致性要求。如果满足,输出各个变量的权重
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值