幂平均(带有惩罚机制)的理论介绍和python实现(含数学建模案例)

理论介绍

  幂平均(power mean)也叫广义平均(generalized mean)或赫尔德平均(Hölder mean),是毕达哥拉斯平均(包含了算术、几何、调和平均)的一种抽象化。其定义如下:
  若p是一非零实数,可定义实数的p次幂平均为:
在这里插入图片描述
  公式原理并不是我们的重点,我们在此主要关注幂平均中的惩罚机制。所谓惩罚机制,通俗的讲就是对相对离散的值的容忍程度。用一个例子说明:
  下面是小胡同学和小孙同学的6门成绩:

成绩小孙小胡
语文10080
数学8080
英语6080
物理8080
生物6080
技术10080
  我们对比多种平均值计算结果:
参数小孙小胡
-----------------------------
算数平均值8080
几何平均值78.2973528280
调和平均值76.5957446880
平方平均值81.6496580980
p=-3 幂平均73.4116103280
p=-2 幂平均74.9512195180
p=-1 幂平均76.5957446880
p=-0.5 幂平均77.4428382580
p=0.5 幂平均79.1520929680
p=1 幂平均8080
p=2 幂平均81.6496580980
p=3 幂平均83.2033529280
  观察上表,我们发现在算术平均值相同的两个数组中,随着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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

铖铖的花嫁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值