如何用topsis法分析权重,python代码
时间: 2024-09-25 17:03:10 浏览: 35
Topsis( Technique for Order of Preferences by Similarity to Ideal Solutions)法是一种偏好的排序方法,它依赖于给定的权重来衡量每个决策方案的优点和缺点。在使用Python进行Topsis分析时,首先需要定义权重、理想解(最好和最差状态),然后按照特定步骤计算各个方案的得分。以下是基本的步骤和Python代码示例:
1. **准备数据**:你需要一个二维数组,其中每一行代表一个决策方案,每一列表示一个属性(特征)及其对应的值。
2. **设置权重**:对于每一个属性,分配一个适当的权重。权重通常需要加总为1,以保证其有效性。
3. **计算极值**:找到每个属性的最好和最差可能值,作为理想解(Best)和理想逆解(Worst)。
4. **标准化数据**:将原始数据除以其标准偏差,并加上每个属性的均值,使得数据范围在[0,1]之间。
5. **计算绩效分**:将标准化后的值乘以相应的权重,得到每个方案的性能分。
6. **计算离度**:分别计算每个方案的理想解和理想逆解的距离。
7. **计算优势和劣势**:将离度转换成优势(理想解方向)和劣势(理想逆解方向)。
8. **加权距离**:通过乘以权重计算总加权距离。
9. **排序决策方案**:根据总加权距离对方案进行排序,优先级高的方案排在前面。
下面是使用Python的Pandas库实现的基本例子:
```python
import pandas as pd
from scipy.stats import zscore
def topsis_analysis(data, weights, ideal_best, ideal_worst):
# 步骤1:数据预处理
df = pd.DataFrame(data)
# 步骤2:标准化数据
normalized_data = zscore(df)
# 步骤3:计算绩效分
performance_scores = normalized_data * weights
# 步骤4:计算离度
distance_to_ideal = performance_scores - ideal_best
distance_to_worst = -1 * (performance_scores - ideal_worst)
# 步骤5:计算优势和劣势
advantages = distance_to_ideal
disadvantages = distance_to_worst
# 步骤6:加权距离
weighted_advantages = advantages / (advantages.abs().sum(axis=1, keepdims=True) + disadvantages.abs().sum(axis=1, keepdims=True))
weighted_disadvantages = disadvantages / (advantages.abs().sum(axis=1, keepdims=True) + disadvantages.abs().sum(axis=1, keepdims=True))
# 步骤7:总加权距离
total_score = (weighted_advantages * weights).sum(axis=1)
worst_score = (weighted_disadvantages * weights).sum(axis=1)
# 步骤8:排序
df['Total Score'] = total_score
df['Worst Score'] = worst_score
df_sorted = df.sort_values(by='Total Score', ascending=False)
return df_sorted
# 示例
data = [[8, 5, 7], [5, 4, 6], [9, 7, 8]] # 3个决策方案,每个方案有3个属性
weights = [0.3, 0.4, 0.3] # 属性权重
ideal_best = [10, 10, 10] # 理想值
ideal_worst = [0, 0, 0] # 理想逆值
result = topsis_analysis(data, weights, ideal_best, ideal_worst)
print(result)
```
请注意,这个代码假设了所有属性都是连续型的。如果属性是非线性的,可能需要先进行适当的数据转换。此外,`zscore`函数在这里用于标准化数据,如果你的数据不是连续的,可能需要其他方法进行归一化。
阅读全文