本文將為你介紹Python熵權法的基礎知識以及如何在實際應用中使用熵權法,讓你能夠更好地理解該算法並將其運用到實際工作中。
一、什麼是Python熵權法?
Python熵權法是一種多準則決策方法,該算法通過計算準則之間的熵差,來確定準則的權重,然後通過加權平均的方式將準則歸一化,得出最後的評價結果。在各種決策問題中都有廣泛的應用,例如評估各種方案的優劣、選取最優解等。Python熵權法的主要思想是結合信息熵和模糊數學理論,對多個指標或評價對象進行分析和決策。
二、Python熵權法的基本流程
Python熵權法的基本流程大致如下:
1.建立決策矩陣。 2.統計各種指標的熵值和條件熵。 3.計算各種指標的熵權。 4.計算各種指標的權重。 5.進行指標歸一化。 6.計算方案的綜合評價。
三、如何在Python中實現熵權法?
下面我們以例如何使用Python進行熵權法計算為例進行說明。
步驟1:建立決策矩陣
假設我們需要對三家餐廳進行綜合評價,選出最優餐廳。我們可以將三家餐廳的菜品種類、口味、環境、服務、價格等因素記在表格中,形成一個決策矩陣:
| | 菜品 | 口味 | 環境 | 服務 | 價格 | |----|------|------|------|------|------| | A | 3 | 4 | 5 | 2 | 1 | | B | 4 | 3 | 4 | 4 | 5 | | C | 5 | 2 | 3 | 5 | 3 |
步驟2:統計各種指標的熵值和條件熵
接着我們需要計算每個指標的熵值和條件熵,並將其填入表格中:
| | 菜品 | 口味 | 環境 | 服務 | 價格 | Entropy | CondEntropy | |----|------|------|------|------|------|---------|-------------| | A | 3 | 4 | 5 | 2 | 1 | 1.4422 | 1.2436 | | B | 4 | 3 | 4 | 4 | 5 | 1.6094 | 1.2219 | | C | 5 | 2 | 3 | 5 | 3 | 1.5219 | 1.0526 |
其中Entropy是指標的熵值,CondEntropy是指標的條件熵值。
步驟3:計算各種指標的熵權
然後我們需要計算每個指標的熵權,熵權可以反映出指標對於評價的重要性。計算公式如下:
熵權 = (1 - Entropy) / (n - Entropy)
其中n為指標數量。
於是我們可以得到熵權表格:
| | 菜品 | 口味 | 環境 | 服務 | 價格 | Entropy | CondEntropy | Entropy_Weight | |----|-------|--------|--------|--------|--------|---------|-------------|----------------| | A | 3 | 4 | 5 | 2 | 1 | 1.4422 | 1.2436 | 0.1375 | | B | 4 | 3 | 4 | 4 | 5 | 1.6094 | 1.2219 | 0.0960 | | C | 5 | 2 | 3 | 5 | 3 | 1.5219 | 1.0526 | 0.1195 |
其中Entropy_Weight是指標的熵權。
步驟4:計算各種指標的權重
由於指標的熵權已經體現了各個指標的重要程度,所以我們可以通過對熵權進行歸一化來計算各個指標的權重。
指標權重 = 熵權 / 熵權之和
於是我們可以得到權重表格:
| | 菜品 | 口味 | 環境 | 服務 | 價格 | Entropy | CondEntropy | Entropy_Weight | Weight | |----|-------|--------|--------|--------|--------|---------|-------------|----------------|-----------| | A | 3 | 4 | 5 | 2 | 1 | 1.4422 | 1.2436 | 0.1375 | 0.3571 | | B | 4 | 3 | 4 | 4 | 5 | 1.6094 | 1.2219 | 0.0960 | 0.2487 | | C | 5 | 2 | 3 | 5 | 3 | 1.5219 | 1.0526 | 0.1195 | 0.3942 | | | | | | | | | | | | | | | | | | | | | | weight sum | | | | | | | | | | | 1.0000 |
由於其和為1,所以這些數值可以被視為最終權重。於是我們可以發現,價格因素影響最小,而環境、菜品和服務因素則影響更大。
步驟5:進行指標歸一化
指標歸一化是在計算方案的綜合評價時必不可少的步驟。常用的歸一化方法有線性變換法、對數變換法、指數變換法等。這裡我們使用線性變換法進行歸一化,將每個指標的得分映射到0-1之間的區間。
歸一化後的決策矩陣: | | 菜品 | 口味 | 環境 | 服務 | 價格 | weight | |----|--------|--------|--------|--------|--------|-------| | A | 0.2500 | 0.6667 | 1.0000 | 0.0000 | 0.0000 | 0.3571| | B | 0.5000 | 0.3333 | 0.6667 | 0.5000 | 1.0000 | 0.2487| | C | 1.0000 | 0.0000 | 0.3333 | 1.0000 | 0.3333 | 0.3942|
步驟6:計算方案的綜合評價
最後我們根據各個指標的權重和歸一化後的得分,計算出每個方案的綜合評價值,按照評價值的大小排序,就可以確定最優解了。計算公式如下:
方案綜合評價值 = Σ(指標得分*指標權重)
四、Python代碼示例
下面是使用Python編寫的熵權法計算的示例代碼:
import numpy as np # 定義決策矩陣 dec_matrix = [ [3, 4, 5, 2, 1], [4, 3, 4, 4, 5], [5, 2, 3, 5, 3] ] # 計算每個指標的熵值 def get_entropy(x): n = len(x) p = [x.count(i) / n for i in set(x)] return -sum([pi * np.log(pi) for pi in p]) entropies = [] for i in range(len(dec_matrix[0])): col_data = [d[i] for d in dec_matrix] entropies.append(get_entropy(col_data)) # 計算每個指標的條件熵 cond_entropies = [] for i in range(len(dec_matrix[0])): col_data = [d[i] for d in dec_matrix] conds = [] for j in set(col_data): sub_data = [d for d in dec_matrix if d[i] == j] entropies_j = [] for k in range(len(sub_data[0])): sub_col_data = [d[k] for d in sub_data] entropies_j.append(get_entropy(sub_col_data)) weight = sum([sub_col_data.count(l) for l in set(sub_col_data)]) / len(dec_matrix) cond_j = sum([p * w for p, w in zip(entropies_j, [sub_col_data.count(l) / len(sub_data) for l in set(sub_data)])]) conds.append(weight * cond_j) cond_entropies.append(sum(conds)) # 計算每個指標的熵權 entropy_weights = [(1 - e) / (len(dec_matrix[0]) - e) for e in entropies] # 計算每個指標的權重 weights = [ew / sum(entropy_weights) for ew in entropy_weights] # 進行指標歸一化 norm_matrix = [[(d[i] - min([d[j] for d in dec_matrix])) / (max([d[j] for d in dec_matrix]) - min([d[j] for d in dec_matrix])) for i in range(len(d))] for d in dec_matrix] # 計算每個方案的綜合評價值 evals = [sum([norm_matrix[j][i] * weights[i] for i in range(len(weights))]) for j in range(len(norm_matrix))] # 打印結果 print("決策矩陣:") print(np.array(dec_matrix)) print("熵值:") print(entropies) print("條件熵值:") print(cond_entropies) print("熵權:") print(entropy_weights) print("權重:") print(weights) print("歸一化後的決策矩陣:") print(np.array(norm_matrix)) print("方案綜合評價值:") print(evals)
五、小結
本文通過對Python熵權法進行詳細闡述,並給出了基本流程和示例代碼,希望能對讀者有所幫助。通過使用Python進行熵權法計算,可以幫助我們更好地進行綜合評價和多準則決策,在實踐中有廣泛的應用。
原創文章,作者:OADEC,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/374972.html