python中是什么意思权重_利用熵值法确定指标权重---原理及Python实现

背景

在进行一些综合评估类项目时,需要给一些指标确定一个合理的权重,用来计算综合得分,这种综合评估类项目在实际的业务中有很多应用,比如:学生奖学金评定方法、广告效果综合评估、电视节目满意度综合评估、用户满意度综合评估等。计算权重的方法比较多,下面主要介绍利用熵值法来确定确定。

一些名词解释

个案

一个个案,一条记录,也就是一个样本,在矩阵里面就是一行数据,不同地方叫法不一样

属性

属性就是样本所拥有的特性,也就是特征,在矩阵里面就是一列数据

熵值法概念

熵值法原理: 熵的概念源于热力学,是对系统状态不确定性的一种度量。在信息论中,信息是系统有序程度的一种度量。而熵是系统无序程度的一种度量,两者绝对值相等,但符号相反。根据此性质,可以利用评价中各方案的固有信息,通过熵值法得到各个指标的信息熵,信息熵越小,信息的无序度越低,其信息的效用值越大,指标的权重越大。

熵是不确定性的度量,如果用

表示第

个信息的不确定度(也就是出现的概率),则整个信息(设有

个)的不确定度量如下所示:

这就是熵,其中

为正常数,当各个信息发生的概率相等时,即

取值最大,此时熵最大,也就是信息无序度最大,各个信息都发生可能性一样

熵值法步骤

可利用信息熵的概念确定权重,假设多属性决策矩阵如下:

则用

表示第

个属性下第

个方案

的贡献度

可以用

来表示所有方案对属性

的总贡献度:

其中,常数

,这样,就能保证

,即

最大1。

由式中可以看出,当某个属性各个方案(样本)的贡献度趋于一致时,

趋于1。

那么各个方案(样本)的贡献度全相等时,就应该不考虑该属性在决策中的作用,也就是该属性的权重应该为0

这样可以看出属性的权重系数大小由各方案差异大小来决定,为此可定义

为第

属性的各方案贡献度的一致性程度

进行归一化后,各属性权重如下:

时,第

属性可以剔除,其权重等于0

如果决策者事先已有一些经验的主观估计权重

,则可借助上述的

来对

进行修正

熵值法最大的特点是直接利用决策矩阵所给出的信息计算权重,而没有引入决策者的主观判断,完全是依靠数据来决定

案例

购买汽车的一个决策矩阵,给出了四个方案供我们进行选择,每个方案中均有相同的六个属性,我们需要利用熵值法求出各属性的权重

车型

油耗

功率

费用

安全性

维护性

操作性

本田

5

1.4

6

3

5

7

奥迪

9

2

30

7

5

9

桑塔纳

8

1.8

11

5

7

5

别克

12

2.5

18

7

5

5

计算步骤

求第

个属性下第

个方案

的贡献度,公式为:

在excel中的话,先求出各列的和,然后用每行的数值比上列和,形成新的矩阵

车型

油耗

功率

费用

安全性

维护性

操作性

本田

5

1.4

6

3

5

7

奥迪

9

2

30

7

5

9

桑塔纳

8

1.8

11

5

7

5

别克

12

2.5

18

7

5

5

总计

34

7.7

65

22

22

26

矩阵:

车型

油耗

功率

费用

安全性

维护性

操作性

本田

5/34

1.4/7.7

6/65

3/22

5/22

7/26

奥迪

9/34

2/7.7

30/65

7/22

5/22

9/26

桑塔纳

8/34

1.8/7.7

11/65

5/22

7/22

5/26

别克

12/34

2.5/7.7

18/65

7/22

5/22

5/26

求出所有方案对属性

的贡献总量,公式为:

在excel操作中,将刚才生成的矩阵每个元素变成每个元素与该元素自然对数的乘积

只列出油耗计算过程,其他属性同理

车型

油耗

本田

5/34 * ln(5/34)

奥迪

9/34 * ln(9/34)

桑塔纳

8/34 * ln(8/34)

别克

12/34 * ln(12/34)

总计

5/34* ln(5/34) + 9/34* ln(9/34) + 8/34* ln(8/34) + 12/34* ln(12/34)

求出常数

,本例中有4个方案,所以求得

,再求

与新矩阵每一列和的乘积,这样获得的 6 个积为所有方案对属性

的贡献度

车型

油耗

本田

5/34 * ln(5/34)

奥迪

9/34 * ln(9/34)

桑塔纳

8/34 * ln(8/34)

别克

12/34 * ln(12/34)

总计

5/34* ln(5/34) + 9/34* ln(9/34) + 8/34* ln(8/34) + 12/34* ln(12/34)

1/ln(4) * [ 5/34* ln(5/34) + 9/34* ln(9/34) + 8/34* ln(8/34) + 12/34* ln(12/34) ]

至此所有的

就求出来了

为第

属性下各方案贡献度的一致性程度,公式为:

利用上面求得的

,可以得到

车型

油耗

本田

5/34 * ln(5/34)

奥迪

9/34 * ln(9/34)

桑塔纳

8/34 * ln(8/34)

别克

12/34 * ln(12/34)

总计

5/34* ln(5/34) + 9/34* ln(9/34) + 8/34* ln(8/34) + 12/34* ln(12/34)

1/ln(4) * [ 5/34* ln(5/34) + 9/34* ln(9/34) + 8/34* ln(8/34) + 12/34* ln(12/34) ]

1 - 1/ln(4) * [5/34* ln(5/34) + 9/34* ln(9/34) + 8/34* ln(8/34) + 12/34* ln(12/34) ]

利用下面公式进行归一化后,即可求得各属性的权重:

经过计算后各属性的权重为:

车型

油耗

功率

费用

安全性

维护性

操作性

权重

0.14

0.07

0.49

0.16

0.04

0.10

所以在购买汽车时,据所提供信息,利用熵值法计算得出的权重为油耗占 14%,功率占 7%,费用占 49%,安全性占 16%,维护性占 4%,操作性占 10%。故我们在进行购买决策时,更多是考虑车型的价格和安全性等重要因素,这是从权重角度考虑的。

利用Python实现熵值法:

代码如下:

import pandas as pd

import numpy as np

import math

from numpy import array

# 定义熵值法函数 熵值法计算变量的权重

def cal_weight(df):

#求k

rows = df.index.size # 行

cols = df.columns.size # 列

k = 1.0 / math.log(rows)

# 矩阵计算、信息熵

x = array(df)

lnf = [[None] * cols for i in range(rows)]

lnf = array(lnf)

for i in range(0, rows):

for j in range(0, cols):

if x[i][j] == 0:

lnfij = 0.0

else:

p = x[i][j] / np.sum(x, axis=0)[j]

lnfij = math.log(p) * p * (-k)

lnf[i][j] = lnfij

lnf = pd.DataFrame(lnf)

E = lnf

# 计算一致性程度

d = 1 - E.sum(axis=0)

# 计算各指标的权重

w = [[None] * 1 for i in range(cols)]

for j in range(0, cols):

wj = d[j] / sum(d)

w[j] = wj

w = pd.DataFrame(w)

w.index = df.columns

w.columns = ['权重']

return w

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Matlab,可以使用Entropy函数来计算信号的信息。信息是用来衡量信号的不确定性和信息量的度量指标。通过计算信号的概率分布和对数运算,可以得到信号的信息。下面是一个示例代码: ```matlab % 生成两个随机信号 x1 = randn(1000,1); x2 = rand(1000,1); % 计算信号的信息 H1 = entropy(x1); H2 = entropy(x2); disp(['Signal 1 entropy: ', num2str(H1)]); disp(['Signal 2 entropy: ', num2str(H2)]); ``` 在这个示例,我们生成了两个随机信号x1和x2,并使用Entropy函数分别计算了它们的信息。信息越大,表示信号的不确定性和信息量越高。根据信号的概率分布情况,可以得出信号的信息。需要注意的是,确定的事件的信息为零,而时间不确定的事件的信息会大于零。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [matlab求信号的信息](https://blog.csdn.net/weixin_44463965/article/details/130250850)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【与特征提取】基于“信息”的特征指标及其MATLAB代码实现(功率谱、奇异谱、能量)](https://blog.csdn.net/fengzhuqiaoqiu/article/details/121177862)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值