首页 > 编程语言 >熵权法确定指标的权重——Python代码

熵权法确定指标的权重——Python代码

时间:2024-10-26 22:47:13浏览次数:8  
标签:权重 Python lnp 指标 entropy 计算 fun data 权法

        熵权法是目前最常用的确定评价指标权重的方法之一。熵是热力学的物理概念,是衡量一个体系混乱或无序度的度量,熵越大表示系统越混乱,所反映的信息越少,反之反映的信息越多。

熵权法计算权重可以分为以下几步:

第一步:计算第 项指标在第 个样本占该指标的比重及熵值,公式如下:

P_{ij} = \frac{Z_{ij}}{\sum\left ( Z _{ij}\right )}        (j = 1,2,…,m)

e_{j} = -k\cdot \sum_{i=1}^{n}(P_{ij}\ln (P_{ij})))

式中,Z_{ij}是标准化指标P_{ij}为第j项指标下第 年占该指标的比重,式中,k是系数,k=1/ln(n),且满足e_{j}> 0

第二步:计算第 项指标的差异系数:

g_{j} = 1 - e_{j}

对于第 项指标,指标值Z_{ij} 的差异越大,对目标评价的作用越大,熵值就越小,e_{j} 越大指标越重要。

第三步:确定指标权重

W_{j} = \frac{g_{j}}{\sum_{j=1}^{m}\left ( g_{j}\right )}

下面是利用熵权法确定权重的Python代码:

# -*- coding: utf-8 -*-


#加载包
import pandas as pd
import numpy as np

#定义归一化计算函数,最小-最大值方法对指标数据进行归一化处理
def positiveIndex_fun(x):#正向指标
    return (x-x.min())/(x.max()-x.min())
def negativeIndex_fun(x):#负向指标
    return (x.max()-x)/(x.max()-x.min())

#计算熵值
def entropy_fun(z):
    p = z/sum(z)
    n = len(p)  # 获取输入向量p的长度
    lnp = np.zeros(n)  # 创建一个长度为n,元素都为0的新数组lnp
    for i in range(n):  # 对向量p的每一个元素进行循环
        if p[i] == 0:  # 如果当前元素的值为0
            lnp[i] = 0  # 则在lnp中对应位置也设置为0,因为log(0)是未定义的,这里我们规定为0
        else:
            lnp[i] = np.log(p[i])  # 如果p[i]不为0,则计算其自然对数并赋值给lnp的对应位置
    entropy = -sum(p*lnp)/np.log(n)
    return entropy  # 返回计算后的对数数组
#计算差异系数
def CoefVar(e):
    g = 1-e
    return g


#加载数据,csv格式数据。数据格式为:每列表示每个指标,每行表示每个样本
data = pd.read_csv(r'Your_data.csv')
#为了便于书写,将指标名称进行编号
data.columns = ['Index1','Index2','Index3','Index4','Index5']#假设有5个指标

#将正向指标和负向指标分开计算
negativeIndex = data2[['Index1','Index2']]#假设第一和第二个指标为负向指标
positiveIndex =data2.drop(['Index1','Index2'],axis=1)#删除两列负向指标,剩下正向指标

#计算归一化数据
nor_negIndex = negativeIndex.apply(negativeIndex_fun)
nor_posIndex = positiveIndex.apply(positiveIndex_fun)
normal_data = pd.concat([nor_negIndex,nor_posIndex],axis=1)#将归一化数据进行合并

###计算权重
#计算熵值
entropy_df = normal_data.apply(entropy_fun)#对每一列计算熵值
entr_data = np.array(entropy_df).T#对数据进行转置

#计算指标的差异系数
CoVar = CoefVar(entr_data)
#计算权重
Weights = CoVar/sum(CoVar)

标签:权重,Python,lnp,指标,entropy,计算,fun,data,权法
From: https://blog.csdn.net/weixin_54435620/article/details/143260400

相关文章

  • 大数据毕业设计:基于python招聘数据分析可视化系统 爬虫 可视化大屏 Django框架 (源码)✅
    博主介绍:✌全网粉丝10W+,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久,选择我们就是选择放心、选择安心毕业✌感兴趣的可以先收藏起来,点赞、关注不迷路✌1、毕业设计:2025年计算机专业毕业设计选题汇总(建议收藏)✅......
  • Python 潮流周刊#74:创下吉尼斯世界记录的 Python 编程课(摘要)
    本周刊由Python猫出品,精心筛选国内外的250+信息源,为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景:帮助所有读者精进Python技术,并增长职业和副业的收入。本期分享了12篇文章,12个开源项目,2则音视频,全文2300字。好消息:即日起至......
  • Jetson_MPU6050_DMP_Python读取
    编译动态链接库I2CDevLib仓库选用Linux上驱动I2C和MPU6050的代码,克隆LinuxI2CDev文件夹到本地,然后进入到文件夹中,创建一个main.cpp用来创建与Python的函数接口,可以自定义。这里的代码没有考虑零偏,只是从DMP取出四元数换算得到结果的,实际用的时候有不小的零偏,可以添加上初始化时......
  • 小北在GitHub上克隆项目(超详细的图文并解)之用 Python 对图片和视频进行高清修复
    前言    估计友友们应该在网上看过很多用AI修复的高清视频,最近我也有相关需求,需要修复几张图片。于是便去GitHub上寻找相关开源项目,结果还真找到一个,效果还很不错,小北这里特意分享出来给友友们~Real-ESRGAN对于算法小白的上手还是比较容易的,即便不懂算法知识,也......
  • 基于Python+Vue开发的母婴商城管理系统
    项目简介该项目是基于Python+Vue开发的母婴商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的网上母婴商城管理系统项目,大学生可以在实践中学习和......
  • 基于Python+Vue开发的婚恋交友管理系统
    项目简介该项目是基于Python+Vue开发的婚恋交友管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的婚恋相亲交友系统项目,大学生可以在实践中学习和提升......
  • 最新毕设-SpringBoot-健康体检系统-12791(免费领项目)可做计算机毕业设计JAVA、PHP、爬
    springboot健康体检系统摘要在如今IT技术快速发展和Internet广泛应用的时代,电子和网络技术给人们生活带来了便利,同时也会直接或间接损害人们的健康。所以,本次的毕业设计创作的意义就是通过信息化的统一管理,给用户尽心健康体检预约提供了方便。本设计主要实现集人性化、高效......
  • (2024最新毕设合集)基于Django的房价分析平台-65434|可做计算机毕业设计JAVA、PHP、爬虫
    摘要本论文主要论述了如何基于Django框架开发一个房价分析平台,本系统将严格按照软件开发流程进行各个阶段的工作,通过爬虫技术对贵州省的房价数据进行爬取,面向对象编程思想进行项目开发。在引言中,作者将论述房价分析平台的当前背景以及系统开发的目的,后续章节将严格按照软件......
  • 深度学习Python停车场智能车牌识别系统opencv流量费用时间AI源码
    随着智能交通技术的发展,停车场智能车牌识别系统逐渐成为现代停车管理的重要工具。该系统利用深度学习和计算机视觉技术,实现对车辆车牌的自动检测与识别,从而提高停车场的管理效率和用户体验。系统架构与功能模块车牌检测:系统首先利用目标检测算法(如YOLO或FasterR-CNN)对停车......
  • 面试 | Python热门面试题·基础篇
    Python简介Python由GuidovanRossum开发,于1991年2月20日首次发布。它是最广泛使用和最受欢迎的编程语言之一,本质上是解释性的,因此在合并动态语义方面提供了灵活性。它也是一种免费的开源语言,语法非常简单干净。这使开发人员可以轻松Python,Python还支持面向对象编程,......