数学建模【基于熵权法对TOPSIS模型的修正】

本文讨论了TOPSIS法中权重设定的问题,指出熵权法虽然基于数据客观性,但存在方差决定权重的争议。举例说明了在某些情况下其不适用。同时,标准ization的选择可能导致结果差异,作者建议论文发表时慎用熵权法,而在竞赛等非严格场合可作为相对较好的选择。

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

一、修正原因

在前面有关于TOPSIS法和熵权法的介绍,我们可以知道TOPSIS有一个和层次分析法共有的问题,就是各个指标的权重是由我们主观或根据专家的主观评价估计的。层次分析法这个问题还更甚之。而恰好熵权法中的权重是由数据确定的,绝对客观。故可以用熵权法得出权重放入TOPSIS法中运用。

由于前面已经有关于TOPSIS法和熵权法详细的讲解,故这里不再赘述。

二、关于熵权法的讨论

其实熵权法是有争议或者说不妥的地方。因为熵权法可以理解为方差越大指标权重就越大,样本数据自己的分布决定了权重,这个的科学性有待考究。

举一个比较极端的例子。X和Y两个指标用来评定班上谁是三好学生,X表示违纪上档案的次数,Y表示逃课的次数,毫无疑问X对评定的影响程度大,但几乎所有的人的X都是0,所以X的权重就会很小,这时候万一有人违纪了但是没有迟到,不可能把三好学生给他吧。

但其实,不管什么评价指标,实际上都不客观,因为模型的参数是自己定的。

熵权法的另一个问题是,因为概率p是位于0-1之间,因此需要对原始数据进行标准化,我们应该选择哪种方式进行标准化呢?查看知网的文献会发现,并没有约定俗成的标准,每个人的选取可能都不一样。但是不同方式标准化得到的结果可能有很大差异,所以说熵权法也是存在着一定的问题的。

都这样说了,那到底用不用呢?

如果大家的论文要发表,别用熵权法;如果大家只是用这个方法进行比赛那么可以随便用,因为这个方法总比你自己随意定义好。

                                                                                                                          ------参考回答:清风

### 使用熵权法改进TOPSIS模型的方法 #### 方法概述 传统的TOPSIS方法依赖于主观赋予权重来衡量不同指标的重要性。然而,这种方法可能导致结果偏差,因为人为设定的权重可能无法完全反映实际情况。为了克服这一局限性,可以引入熵权法自动计算各个指标的客观权重。 熵权法通过分析数据本身的离散程度来确定各指标的重要度。具体来说,如果某个指标的数据差异较大,则该指标对于区分备选方案更为重要;反之则不那么重要。因此,利用熵权法能够更科学合理地分配权重给不同的评估标准[^2]。 #### 改进后的流程说明 1. **数据预处理** - 对原始数据进行必要的清洗和转换操作; - 将所有效益型指标转化为成本型指标或相反(视具体情况而定),使得后续计算统一方向上的最优解。 2. **标准化处理** - 鉴于不同量纲之间可能存在数量级差异,在比较之前需先做无量纲化变换。 3. **构建概率矩阵并求取信息熵** - 根据标准化后的数值建立相应的概率分布表; - 应用公式\[E_j=-k\sum_{i=1}^{m}(p_{ij}\ln p_{ij})\]计算第\(j\)项特征的信息熵值,其中\(k=\frac{1}{\ln m}\),\(m\)表示样本总数。\(^4] 4. **获取信息效用值与权重向量** - 利用\[g_j=(1-E_j)\]得到各项属性的信息效用值; - 权重定义为:\[\omega_j=\frac{g_j}{\sum g_i}, i \in [1,n]\],这里n代表总的属性数目. 5. **计算加权规范化决策矩阵中的理想点坐标** - 正理想解(A+)\[A^+=max(\omega_iz_{ij}), j \in J_B; min(\omega_iz_{ij}), j \in J_C\] - 负理想解(A-)\[A^-=min(\omega_iz_{ij}), j \in J_B; max(\omega_iz_{ij}), j \in J_C\] 这里,\(J_B,J_C\)分别指代收益类, 成本类指标集合.\(^1] 6. **测量相对接近度** - 分别求得每个待评对象到正负理想点的距离D+, D-, 并据此得出贴近度C*. 7. **排序输出最终结果** ```python import numpy as np from math import log def entropy_weight(data): """Calculate the weight vector using Entropy Method""" # Step 0: Data Preprocessing & Normalization norm_data = data / np.sum(data, axis=0) # Step 1: Construct Probability Matrix P and Calculate Information Entropy E prob_matrix = norm_data / np.tile(np.sum(norm_data, axis=0), (data.shape[0], 1)) epsilon = 1e-6 # Avoid division by zero error when calculating ln(p_ij) info_entropy = -np.sum(prob_matrix * np.log(prob_matrix + epsilon), axis=0) / log(len(data)) # Step 2: Get Utility Value G And Weight Vector Omega utility_value = 1 - info_entropy omega_vector = utility_value / sum(utility_value) return omega_vector if __name__ == "__main__": # Example dataset with three attributes for five alternatives example_dataset = np.array([[0.8, 0.6, 0.9], [0.7, 0.8, 0.7], [0.6, 0.9, 0.6], [0.9, 0.7, 0.8], [0.7, 0.7, 0.7]]) weights = entropy_weight(example_dataset) print(f"Weights calculated via Entropy Method are {weights}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

还有糕手

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

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

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

打赏作者

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

抵扣说明:

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

余额充值