评价决策类-嫡权法

师从江北

问题的提出

基本概念和步骤

原始矩阵正向化

正向矩阵标准化

计算概率矩阵P

计算熵权

总结

矩阵正向化->正向矩阵标准化->计算概率矩阵->计算熵权

代码实现

import numpy as np

#自定义一个对数函数mylog,用于处理输入数组中的零元素
def mylog(p):
    n=len(p)    #获取输入向量P的长度
    lnp=np.zeros(n) #创建一个长度为n,元素都为0的新数组lnp
    for i in range(n):  #对向量P的每一个元素进行循环
        if p[i]==0:
            lnp[i]=0    #则在lnp中对应的位置也设置为0,因为log(0)是未定义的,这里我们规定为0
        else:
            lnp[i]=np.log(p[i]) #如果p[i]不为0,则计算其自然对数并赋值给lnp的对应位置
    return lnp #返回计算后的对数数组

#定义一个指标矩阵
X=np.array([[9,0,0,0],[8,3,0.9,0.5],[6,7,0.2,1]])

#对矩阵X进行标准化处理,得到标准化矩阵Z
Z=X/np.sqrt(np.sum(X*X,axis=0))

print("标准化矩阵Z= ")
print(Z)    #打印标准化矩阵Z

#计算熵权所需变量和矩阵初始化
n,m=Z.shape #获取标准化矩阵Z的行数和列数
D=np.zeros(m)   #初始化一个长度为m的数组D,用于保存每个指标的信息效用值

#计算每个指标的信息效用值
for i in range(m): #遍历Z的每一列
    x=Z[:,i]    #获取Z的第i列,即第i个指标的所有数据
    p=x/np.sum(x)   #对第i个指标的数据进行归一化处理,得到概率分布p

    #使用自定义的mylog函数计算p的对数,需要注意的是,如果p中含有0,直接使用np.log会得到-inf,这里使用自定义函数避免这个问题
    e=-np.sum(p*mylog(p))/np.log(n) #根据熵的定义计算第i个指标的信息熵e
    D[i]=1-e    #根据信息效用值的定义计算D[i]

#根据信息效用值计算各指标的权重
W=D/np.sum(D)   #将信息效用值D归一化,得到各指标的权重W

print("权重 W =")
print(W)    #打印得到的权重数组W

若有侵权,请联系作者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

乘~风

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

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

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

打赏作者

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

抵扣说明:

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

余额充值