r 做熵权topsis 代码
时间: 2023-07-29 20:04:30 浏览: 199
TOPSIS熵值法R代码.R
熵权TOPSIS是一种基于熵权系数计算的多属性决策方法,可以用于评估和排序多个候选方案。下面是一个示例代码:
```python
import numpy as np
def entropy_weight(data):
# 计算每个属性的熵
entropy = []
for column in data.T:
p = np.array([np.count_nonzero(column==value)/len(column) for value in set(column)]) # 计算每个属性值的频率
entropy.append(-np.sum(p * np.log2(p))) # 计算每个属性的熵
entropy = np.array(entropy)
# 计算每个属性的权重
weights = (1-entropy) / np.sum(1-entropy)
return weights
def topsis(data, weights):
# 数据归一化
normalized_data = data / np.sqrt(np.sum(data**2, axis=0))
# 乘以权重
weighted_data = normalized_data * weights
# 理想解和负理想解
ideal_solution = np.max(weighted_data, axis=1)
negative_ideal_solution = np.min(weighted_data, axis=1)
# 计算距离
distance_to_ideal = np.sqrt(np.sum((weighted_data - ideal_solution)**2, axis=1))
distance_to_negative_ideal = np.sqrt(np.sum((weighted_data - negative_ideal_solution)**2, axis=1))
# 计算接近程度
closeness = distance_to_negative_ideal / (distance_to_ideal + distance_to_negative_ideal)
return closeness
# 示例数据
data = np.array([[3, 4, 2, 5, 1], [2, 5, 1, 4, 3], [5, 4, 3, 2, 1]])
weights = entropy_weight(data)
result = topsis(data, weights)
print(result)
```
这段代码实现了熵权TOPSIS方法。首先,在`entropy_weight`函数中计算了每个属性的熵,并根据熵计算了每个属性的权重。然后,在`topsis`函数中,将数据进行归一化处理,并乘以权重。接下来,计算理想解和负理想解,并根据两者计算出每个方案的距离。最后,计算出每个方案的接近程度。代码最后输出了接近程度的结果。你可以根据实际需求调整代码以适应不同的数据集。
阅读全文