python实现熵权法

news2025/2/26 19:40:55

原文:https://mp.weixin.qq.com/s/vPNPdbZy11q1qsfEz9etZQ

1 熵权法简介

熵源自于希腊语 “ 变化 ” 表示变化的容量,德国物理学家克劳修斯为了将热力学第二定律格式化而引入熵的概念 。

熵的概念来源于热力学,是用来描述过程的不可逆现象 。后来申农最先将熵引入信息论,在信息论中用熵来表示事物出现的不确定性,将熵作为不确定性的度量

熵权法是一 种根据各项指标调研数据所提供的信息量大小来确定指标权重的方法,其基本原理为若某个指标的熵值较小 、熵权较大时说明该指标能够提供的信息量越多,在决策时能起到的作用也越大;相反,某个指标的熵值较大、熵权较小时说明该指标能够提供的信息量越少,在决策时起到的作用也就越小。

熵权法是一种依赖于数据本身离散性的客观赋值法,用于结合多种指标对样本进行综合打分,实现样本间比较

2 熵权法计算步骤

1)选取数据
选取 m m m 个指标,共 n n n 个样本,则 X i j X_{ij} Xij 为第 i i i 个样本的第 j j j 个指标的数值:

2)数据标准化处理

各项指标的计量单位以及方向不统一的情况下,需要对对数据进行标准化,为了避免求熵值时对数无意义,可以为每个0值加上较小数量级的实数,如0.01。

  • 对于正向指标(越大越好的指标)
  • 对于负向指标(越小越好的指标)

3) 计算第 j j j 项指标下第 i i i 个样本占该指标的比重

4)计算第 j j j 项指标的熵值

熵越大说明系统越混乱,携带的信息越少,熵越小系统越有序,携带的信息越多。

P i j = 0 P_{ij}=0 Pij=0 时, e j = 0 e_j=0 ej=0 K = 1 ln ⁡ ( n ) K=\frac{1}{\ln (n)} K=ln(n)1,其中 n n n 为样本个数。

5)计算第 j j j 项指标的差异系数

某项指标的信息效用值取决于该指标的信息熵 e j e_j ej 与 1 之间的差值,它的值直接影响权重的大小。信息效用值越大,对评价的重要性就越大,权重也就越大。

6)计算评价指标权重

利用熵值法估算各指标的权重,其本质是利用该指标信息的差异系数来计算,其差异系数越高,对评价的重要性就越大(或称权重越大,对评价结果的贡献就越大)

j j j项指标的权重:

7)计算各样本综合得分

3 python实现

import numpy as np
 
#输入数据
loss = np.random.uniform(1, 4, size=5)
active_number = np.array([2, 4, 5, 3, 2])
data = np.array([loss, active_number]) # 2个变量5个样本
print(data)
 
# 定义熵值法函数
def cal_weight(x):
    '''熵值法计算变量的权重'''
    # 正向化指标
    #x = (x - np.max(x, axis=1).reshape((2, 1))) / (np.max(x, axis=1).reshape((2, 1)) - np.min(x, axis=1).reshape((2, 1)))
    # 反向化指标
    x = (np.max(x, axis=1).reshape((2, 1)) - x) / (np.max(x, axis=1).reshape((2, 1)) - np.min(x, axis=1).reshape((2, 1)))
 
    #计算第i个研究对象某项指标的比重
    Pij = x / np.sum(x, axis=1).reshape((2, 1))
    ajs = []
    #某项指标的熵值e
    for i in Pij:
        for j in i:
            if j != 0:
                a = j * np.log(j)
                ajs.append(a)
            else:
                a = 0
                ajs.append(a)
    ajs = np.array(ajs).reshape((2, 5))
    e = -(1 / np.log(5)) * np.sum(ajs, axis=1)
    #计算差异系数
    g = 1 - e
    #给指标赋权,定义权重
    w = g / np.sum(g, axis=0)
    return w
 
w = cal_weight(data)
print(w)

结果:

[[1.57242561 1.12780429 2.24411338 2.36236155 2.37789035]
 [2.         4.         5.         3.         2.        ]]
[0.70534397 0.29465603]

参考:
https://blog.csdn.net/weixin_43425784/article/details/107047869
https://blog.csdn.net/mzy20010420/article/details/127327787

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/39408.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

sql注入手法详解

sql定义 sql--结构化查询语句 sql注入:首先我们通过前端将我们的payload(恶意代码)传送到后台服务器 传送到后台以后 我们提交的payload拼接到sql语句中 作为sql语句的一部分被执行 从而导致数据库又被脱库甚至删库的风险 使得数据库受损 sql注入手法 sql注入可…

领悟《信号与系统》之 非周期信号的傅里叶变换及性质

非周期信号的傅里叶变换及性质一、非周期信号的傅里叶变换二、 典型信号的傅立叶变换1.单边指数信号2.偶双边指数3. 矩阵脉冲信号4. 奇双边指数5. 符号函数6. 冲激信号7. 阶跃信号三、常用傅里叶变换表这里记录的信号都是非周期信号的傅里叶变化,频谱变换的特点就是…

VsCode 配置eslint,支持typescript的语法检查,及时发现低级语法错误,包括函数未定义等行为

背景 最近学习cocos的小游戏制作,参考游戏管理器的代码进行调试的时候,发现自己运行的结果一直都是跟官方效果不一样,没有自动生成更多的方块。肉眼检查代码差异,基本上代码是一样的,浏览器页面调试的时候也看不出问题…

[附源码]Python计算机毕业设计高校教室申请管理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

【仿牛客网笔记】项目进阶,构建安全高效的企业服务——热帖排行

p:投票数 T:发布时间间隔 G:系数,通常为1.5,1.8 计算帖子的分数 注入RedisTemplate 帖子刷新 实现定时任务 刷新帖子 实现更新帖子分数 刷新帖子分数任务 配置Trigger 注释掉定时任务,注释注解就可以 启动服务之…

人口数据集:地级市常住人口与户籍人口、人口1%抽样调查数据两大维度指标数据

一、地级市常住人口与户籍人口 1、数据来源:地级市常住人口数据(主要来源于各地政府公报),户籍人口数据来源于《中国城市统计年鉴》 2、时间跨度:2003-2019年 3、区域范围:280个地级市 4、指标说明&…

[附源码]Python计算机毕业设计电影网站系统设计

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

【Spring】Bean生命周期

一、背景: 自动注入 UserService 对象, UserService 结构如下 二、创建 Bean 的整体流程: UserService.class ------> 无参的构造方法 ------> 普通对象(无值) ------> 依赖注入 ------> 初始化前&#…

FreeCAD二次开发-基于控制台模式FC外部开发

版本 FreeCAD0.18.2+PyCharm Community 2020.3.3 演示效果 环境搭建步骤 1.先安装好FreeCAD和PyCharm 2.添加环境变量 点击确定,全部关掉。 3.测试变量是否生效(CMD打开控制台,输入python回车) 弹出如下,说明可以进入FreeCAD自带的python解释器 4.打开PyCharm新建项目 …

Windows静态库用C++代码调用C语言的旧库方法extern ”c“

静态库特点 运行不存在 静态库源码被链接到调用程序中 目标程序的归档 C语言静态库 C静态库的创建 1.创建一个静态库项目 2.添加库程序,源文件使用C文件 C静态库的使用 库路径设置:可以使用pragma关键字设置 #pragma comment(lib,“./lib/cli…

15、Mybatis获取参数值的情况1(mapper接口方法的参数为单个字面量类型)

Mybatis获取参数值的情况1(mapper接口方法的参数为单个字面量类型) #{}和${}可以通过任意名称来获取 mapper接口方法的参数为单个字面量类型第一步: 第二步:#{} 结果: 第二步:${} 结果 第三步: 这种也行&…

站酷基于服务网格 ASM 的生产实践

01背景介绍Aliware站酷(ZCOOL)2006 年 8 月创立于北京,深耕设计领域多年,聚集了 1500 万设计师、摄影师、插画师、艺术家、创意人,在设计创意群体中具有一定的影响力与号召力。站酷在创立之初,就以“让设计…

libcurl 库的编译

因为要用到 libcurl 库的接口进行练习,而现在手上只有curl相关的头文件,那没办法只能下载源码进行编译了,这里记录一下编译 x86 与 hisi dv300 版本的动态库。 根据头文件 curlver.h 里的版本信息,我是直接下载 7.67.0 版本的源码…

领悟《信号与系统》之 LTI 系统的卷积积分及性质

LTI 系统的卷积积分及性质一、卷积积分及其性质1. 任意信号的分解2. 任意信号作用下的零状态响应3. 卷积的定义4. 卷积性质1. 代数性质2. f(t)与奇异信号的卷积 (非常重要)3. 卷积的微分和积分4. 卷积时移5. 常用信号的卷积公式二、总结重点笔记主要记录…

MNN--初步学习

来自阿里MNN有三个贡献点: 提出了预推理机制,在线计算推理成本和最优方案优化了kernel提出后端抽象实现混合调度MNN的架构: 分离线和在线两部分。离线就是很传统的模型转换、优化、压缩、量化的那一套东西,这里mnn转出的模型文件…

【外卖项目实战开发三】

文章目录分类管理业务开发公共字段自动填充问题分析代码实现功能完善新增分类需求分析数据模型代码开发分类信息分页查询需求分析代码开发删除分类需求分析代码开发代码完善关键代码修改分类需求分析代码实现分类管理业务开发 公共字段自动填充 问题分析 前面我们已经完成了…

A股上市公司MSCI指数和ESG评级效果(2010-2021年)

1、数据来源:摩根斯坦利资本国际公司(Morgan Stanley Capital International) 2、时间跨度:2010--2021 3、区域范围:A股上市公司 4、指标说明: ESG是英文Environmental(环境)、Social(社会&…

《人月神话》(The Mythical Man-Month)6贯彻执行(Passing the Word)

《人月神话》(The Mythical Man-Month)Chapter 6. 贯彻执行 Passing the Word他只是坐在那里,嘴里说:"做这个!做那个!"当然,什么都不会发生,光说不做是没有用的。- 哈里杜…

基于主从博弈的社区综合能源系统分布式协同优化运行策略matlab/cplex程序

基于主从博弈的社区综合能源系统分布式协同优化运行策略matlab/cplex程序 随着能源市场由传统的垂直一体式结构向交互竞争型 结构转变,社区综合能源系统的分布式特征愈发明显,传统 的集中优化方法难以揭示多主体间的交互行为。该文提出一 种基于主从博弈…

(免费分享)基于ssm在线点餐

源码获取:关注文末gongzhonghao,017领取下载链接 开发工具:IDEA ,Tomcat8.0,数据库:mysql5.7 /*** FileName: CategoryController** Date: 2020/9/30 17:04* Description:*/ package com.qst.goldenarches.contro…