用Numpy实现TOPSIS法

文章介绍了Topsis方法在决策分析中的应用,包括构建决策矩阵,统一为效益型矩阵,进行归一化和模一化处理,使用信息熵法确定属性权重,以及计算正负理想解、欧式距离和接近度,以辅助复杂决策问题的解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、构建决策矩阵D

决策矩阵指的是方案A{i_{}}^{}对属性X_{j}的取值,假设方案有m个,属性值有n个,D=(d_{ij})_{mxn}称为决策矩阵;

二、统一为效益型矩阵

效益型属性的属性值越大,对决策的重要程度就越高;费用型属性与此相反,在进行统一时,只需将效益型的属性取倒数即可。本例中对第一类属性取了对数;

D=np.array([[1/25,9,7],[1/18,7,7],[1/12,5,5]])

三、将决策矩阵进行标准化

实现标准化有三种方法:归一化、最大化和模一化;Topsis方法中主要使用的是归一化模一化,下面是归一化和模一化的具体原理;

归一化:

Numpy代码(文章中使用到的代码都是在jupyter notebook中书写的)

#标准化-归一化
n = len(D)
std_matrix = np.zeros((n, n))
for i in range(n):
    std_matrix[:,i] = D[:,i] / sum(D[:,i])#第i列的所有元素,相当于对数组进行缩放

 模一化:

在Numpy中求解该矩阵时,可以将D转置为D_T,然后将D_T与D相乘,再进行开根号,这样得到的矩阵的对角线元素就是分母,然后按列为单位再进行相除;

D_T=np.transpose(D)
temp=pow(np.dot(D_T,D),1/2)# 相加开根号
for i in range(n):
    r[:,i]=D[:,i]/temp[i,i]
r

四、利用信息熵法确定属性权重

各方案关于属性X_{j}的熵为

        

e=-1/np.log(len(std_matrix))*sum(std_matrix*np.log(std_matrix))#计算信息熵
e

 定义区分度为

f=1-e
w=f/sum(f)#计算权重
w

五、TOPSIS方法

1、计算矩阵V

V=np.zeros((n,n))
for i in range(n):
    V[:,i]=r[:,i]*w[i]
V

 

2、找出正理想解和负理想解

Vpos = np.max(V,axis=0)
Vpos
Vneg = np.min(V,axis=0)
Vneg

 

 3、计算欧式距离

#欧式距离的算法
Spos=np.linalg.norm(V-Vpos,axis=1)
Spos
Sneg=np.linalg.norm(V-Vneg,axis=1)
Sneg

4、接近度的计算与归一化

#计算相对接近度
Cpos=Sneg/(Spos+Sneg)
Cpos=Cpos/sum(Cpos)
Cpos

源代码下载链接

链接:https://pan.baidu.com/s/119VCy34sTIqAFYKwn0b7gQ?pwd=zd5n 
提取码:zd5n

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值