双参数组合赋权法-熵权法与离差最大化法


前言

善始者繁多,克终者盖寡。

在一个评价体系中,为了提高各评价指标权重的准确性,我们通常会先采用多种方法方法确定指标的权重,例如熵权法、层次分析法、离差最大化法等,再根据不同方法求得的权重计算出指标的综合权重。

下面和大家分享一种基于欧式聚类的组合赋权法。主要参考的文献是罗文劼等 基于熵权-离差的GA-BP神经网络编程能力评估方法[J]


一、数据来源

假设已通过调查研究发现人的气质由身高、体重、年龄三个因素的影响,部分被试数据如下:
被试数据

1.1 熵权法计算权重

参考熵权法计算评价指标权重——使用Python和Excel实现计算出三项指标的权重:
熵权法权重

1.2 离差最大化法计算权重

参考离差最大化法计算评价指标权重——使用Python和Excel实现计算出三项指标的权重:
离差最大化法权重

二、实现步骤

2.1 计算两类权重的距离(欧式距离)

根据1.1及1.2我们得到了两个权重向量:

w1=(0.374765477338344,0.17069834913822,0.454536173523437)
w2=(0.324675324675325,0.25974025974026,0.415584415584416)

两权重向量间的距离可以表示为:
距离

w1、w2分别表示两权重向量;
w1j、w2j分别表示两权重向量中第j项指标;
q表示指标个数。

2.2 计算两类权重的权重(偏好系数)

综合权重可以表示为:
综合权重

a表示第一类权重在计算综合权重时所占的权重(偏好系数);
b表示第二类权重在计算综合权重时所占的权重(偏好系数);

具体到某一个具体的属性石,第j个指标的综合权重可以表示为:
第j个指标的综合权重

a、b需满足如下约束条件:
约束条件1
约束条件2

约束条件1可以理解为线性变换的过程,即将两个权重向量w1、w2转换为两个标量a、b;
a、b分别表示两类权重在计算综合得分时的权重,其必然满足约束条件2.

得到a、b的解为:
a的解

b的解

2.3 计算综合权重与综合得分

根据公式计算出两类权重的综合权重:
综合权重
使用综合权重计算出每条记录的综合得分:
综合得分

C表示某条记录的最终综合得分;
wj表是第j项指标的综合权重;
Xj表示某条记录第j项指标上的数据。

三、使用Excel实现

3.1 计算两权重向量的距离

图中第一行表示熵权法得出的各指标权重,第二行为离差最大化法得出的各指标权重。
两权重向量
距离计算公式为:

=SQRT(POWER(A2-A3,2)+POWER(B2-B3,2)+POWER(C2-C3,2))
计算结果为:0.10933766361143

3.2 计算两类权重的权重(偏好系数)

计算公式为:

=(1+D1)/2
=(1-D1)/2
结果分别为:
0.554668831805715
0.445331168194285

3.3 计算各指标综合权重

根据3.3中a、b的求解公式,我们可以得到两种组合;

w=aw1+bw2
w=bw1+aw2

以“身高”为例,其综合权重计算公式为:

=A2*$E 1 + A 3 ∗ 1+A3* 1+A3E$2

=A2*$E 2 + A 3 ∗ 2+A3* 2+A3E$1

依次计算每项指标的综合权重,可以得到两种方案:
每项指标的综合权重

四、使用Python实现

4.1 读取文件

excel中存放了不同方案下各指标的权重。

#读取文件
filename = "组合赋权法.xlsx"
path = "files/"
data = pandas.read_excel(path+filename,sheet_name=3)
print(data)

4.2 计算两类权重的距离

#计算两者评价方法下权重的距离
dis = 0.0
new_weight = []
cols = data.columns
for i in cols:
    col = data[i]
    dis += (col[1]-col[0])*(col[1]-col[0])
print(math.sqrt(dis))

4.3 计算各指标综合权重

#计算综合权重
w1 = (1+math.sqrt(dis))/2
w2 = (1-math.sqrt(dis))/2
#计算各指标最终权重
result_weight1 = []
result_weight2 = []
for i in cols:
    col = data[i]
    temp_weight1 = w1 * col[0] + w2 * col[1]
    temp_weight2 = w1 * col[1] + w2 * col[0]
    result_weight1.append(temp_weight1)
    result_weight2.append(temp_weight2)
#将最终权重写入文件
data.loc["最终权重1"] = result_weight1
data.loc["最终权重2"] = result_weight2

4.4 保存文件

#保存文件
f1 = filename.split(".")[0]+"最终权重.xlsx"
data.to_excel(path+f1)

4.5 程序测试

原始文件内容如图所示:
在这里插入图片描述
程序运行后得到两种综合权重方案:

在这里插入图片描述

五、思考与讨论

该种组合赋权法的思想是:将两个权重向量通过线性变换转换为两个标量,方法1得到了指标权重w1=[w11,w12…,w1j],方法2得到了指标权重w2=[w21,w22…,w2j],w1与w2间的距离可以用各对应指标距离和表示(对应2.1),在w1和w2组成的系统中,w1权重为a,w2权重为b,此时两者间的距离就对应直线中两点的距离(对应2.2),以此便求出了新的系统中w1和w2的权重,即a与b的值。

思考
求解后a的取值有两个,b的取值也有两个,不同的取值产生了不同的最终权重(对应4.5最终权重1、最终权重2),那这两种方案我们又该如何选择呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进击的墨菲特

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值