?
1. 加權平均中的權重計算(已知權重值)
?
如果已知各元素的權重,直接用權重乘以對應值后求和。
?
# 示例:計算加權平均分(權重之和為1)
scores = [80, 90, 70] # 各項分數
weights = [0.3, 0.5, 0.2] # 對應權重
?
# 方法1:循環計算
weighted_sum = 0
for s, w in zip(scores, weights):
? ? weighted_sum += s * w
print(f"加權平均分:{weighted_sum}") # 結果:82.0
?
# 方法2:用numpy簡化(適合大量數據)
import numpy as np
print(np.dot(scores, weights)) # 結果:82.0
?
?
2. 特征權重(機器學習場景)
?
通過模型自動計算特征的重要性(如決策樹、線性回歸)。
?
from sklearn.linear_model import LinearRegression
from sklearn.datasets import load_diabetes
?
# 加載數據
data = load_diabetes()
X, y = data.data, data.target
?
# 訓練線性回歸模型,系數即特征權重
model = LinearRegression()
model.fit(X, y)
?
# 輸出各特征的權重
print("特征權重:", model.coef_)
?
?
3. 層次分析法(AHP)計算權重
?
用于多準則決策中,通過判斷矩陣計算權重。
?
import numpy as np
?
def ahp_weight(matrix):
? ? """根據判斷矩陣計算權重(特征值法)"""
? ? eigenvalues, eigenvectors = np.linalg.eig(matrix)
? ? max_idx = np.argmax(eigenvalues)
? ? max_eigen = eigenvalues[max_idx].real
? ? # 歸一化特征向量得到權重
? ? weights = eigenvectors[:, max_idx].real
? ? return weights / np.sum(weights)
?
# 示例判斷矩陣(3個元素的相對重要性)
judge_matrix = np.array([
? ? [1, 2, 3],
? ? [1/2, 1, 2],
? ? [1/3, 1/2, 1]
])
?
print("AHP權重:", ahp_weight(judge_matrix)) # 結果約為 [0.5396, 0.3090, 0.1514]
?
- 簡單加權計算:直接用元素×權重求和(適合已知權重)。
- 模型權重:調用sklearn等庫的模型,通過?coef_?或?feature_importances_?獲取。
- 決策權重:用層次分析法(AHP)或熵權法等,根據判斷矩陣/數據分布計算。
?
根據具體需求選擇對應的方法即可。