理论介绍
幂平均(power mean)也叫广义平均(generalized mean)或赫尔德平均(Hölder mean),是毕达哥拉斯平均(包含了算术、几何、调和平均)的一种抽象化。其定义如下:
若p是一非零实数,可定义实数的p次幂平均为:
公式原理并不是我们的重点,我们在此主要关注幂平均中的惩罚机制。所谓惩罚机制,通俗的讲就是对相对离散的值的容忍程度。用一个例子说明:
下面是小胡同学和小孙同学的6门成绩:
成绩 | 小孙 | 小胡 |
---|---|---|
语文 | 100 | 80 |
数学 | 80 | 80 |
英语 | 60 | 80 |
物理 | 80 | 80 |
生物 | 60 | 80 |
技术 | 100 | 80 |
我们对比多种平均值计算结果: | ||
参数 | 小孙 | 小胡 |
------------ | ------------- | ---- |
算数平均值 | 80 | 80 |
几何平均值 | 78.29735282 | 80 |
调和平均值 | 76.59574468 | 80 |
平方平均值 | 81.64965809 | 80 |
p=-3 幂平均 | 73.41161032 | 80 |
p=-2 幂平均 | 74.95121951 | 80 |
p=-1 幂平均 | 76.59574468 | 80 |
p=-0.5 幂平均 | 77.44283825 | 80 |
p=0.5 幂平均 | 79.15209296 | 80 |
p=1 幂平均 | 80 | 80 |
p=2 幂平均 | 81.64965809 | 80 |
p=3 幂平均 | 83.20335292 | 80 |
观察上表,我们发现在算术平均值相同的两个数组中,随着p的增大,波动较大的数组的幂平均值随p的增大而增大。这就是所谓的惩罚/奖励机制,即对波动大小的偏好设置。 |
案例实现
我们知道,在数学建模中会采取多模型联合的方法,其中比较简单经典的思想就是平均思想。相较于简单粗暴的算数平均,幂平均的联合方法更加灵活,更容易贴近题目主题。
结合综合评价方法,我们可以对不同的综合评价结果组合采取幂平均方法联合。水平有限,较冗长。
def power_average(left, right, data, k): # 幂平均(k为惩罚制度)
data = data[left:right]
k_power = np.power(data, k)
k_power[k_power == np.inf] = 10000 # 处理0开方
k_power_sum = k_power.T.sum(axis=1)/(right-left)
score = np.power(k_power_sum, 1/k)
return score
def mixed_score(subjective, objective, data, k): # 对客观型和主观型综合评价方法采取不同p值的幂平均
Standard_data = Normalization(data)
a = pd.DataFrame(Standard_data.T)
a.to_excel('a.xlsx')
if subjective > 1: # 防止只有一种综合评价方法,幂平均报错
subjective_score = power_average(0, subjective, Standard_data, k)
else:
subjective_score = Standard_data[0, :]
if objective > 1:
objective_score = power_average(subjective, subjective+objective, Standard_data, 2)
else:
objective_score = Standard_data[subjective, :]
print(subjective_score)
print(objective_score)
mixed = []
mixed.append(subjective_score)
mixed.append(objective_score)
print(mixed)
score = power_average(0, 2, mixed, k)
return score
结果
在此我们只需关注Subjective,Objective,Final Score三条线,这是联合模型的结果可视化。
多种综合评价方法(AHP, TOPSIS, Entropy method, CRITIC, Factor Analysis)的实现见这篇博客:https://blog.csdn.net/Hjh1906008151/article/details/123433270