用Numpy实现TOPSIS法

一、构建决策矩阵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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
TOPSIS是一种用于综合评价的方,可以利用原始数据信息准确地反映各评价方案之间的差距。它由C.L.Hwang和K.Yoon于1981年首次提出,也被称为逼近理想解排序或优劣解距离。 在使用TOPSIS进行评价时,基本的过程包括以下几个步骤: 1. 将原始数据矩阵进行统一指标类型处理,通常是进行正向化处理,以确保各指标的方向一致。 2. 对正向化后的矩阵进行标准化处理,以消除各指标量纲的影响。 3. 找到最优方案和最劣方案,即在有限方案中找到最好和最差的方案。 4. 分别计算每个评价对象与最优方案和最劣方案之间的距离,以确定每个评价对象与最优方案的相对接近程度。 5. 根据计算结果,对评价对象进行排序,以确定其优劣程度。 对于使用Python实现TOPSIS,可以使用NumPy等科学计算库进行矩阵运算和数学计算。具体实现涉及到数据处理标准化、距离计算等步骤,可以根据实际需求选择合适的方和函数。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [python实现topsis](https://blog.csdn.net/weixin_52300428/article/details/126309794)[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^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值