熵值法计算权重

简介: 熵值法计算权重是一种基于信息论的方法,用于多指标综合评价。通过计算各指标的信息熵,反映指标的变异程度,从而确定其在综合评价中的权重。熵值越小,表示信息量越大,指标的重要性越高。该方法适用于样本数据较少的情形,能有效避免主观因素的影响。文中详细介绍了熵值法的原理、计算步骤及Python实现代码。

数据处理过程中,数据量越多,模型训练对样本数据学习过程会更好,因此计算权重最好方式是训练模型加权,但实际过程会存在样本数据较小的情况,可以使用熵值法来计算数据。

  1. 概念解释

权重概念:权重是一个相对的概念,是针对某一指标而言,某一指标的权重是指该指标在整体评价中的相对重要程度。

熵值法是一种客观赋权法,是根据各项指标观测值所提供的信息的大小来确定指标权重。

在信息论中,熵是对不确定性信息的一种度量。信息量越大,不确定性就越小,熵也就越小;信息量越小,不确定性越大,熵也越大。因而利用熵值携带的信息进行权重计算,结合各项指标的变异程度,利用信息熵这个工具,计算出各项指标的权重,为多指标综合评价提供依据。

  1. 知识补充:

熵 是 统计物理与信息论术语 ,泛指某些 物质系统状态的 一种 量度,某些物质系统状态可能出现的程度。系统 越混乱 ,熵越大 。

假定P(x=xi)=pi,则 熵 公式如下
image.png

其中 n 代表分类问题中 类别个数 。

而 多分类 问题可以转化为 多个二分类 问题。

假设特征 A 取值X ∈ X 1 , X 2 , … , X i ,每个特征概率取值 image.png 则二分类的 熵 公式如下:

image.png

图像如下

image.png

熵值法求权重过程

输入数据是已经经过预处理的数据。

熵权法求权重 分为以下几步:

  1. 对各特征数据进行 特征缩放 ,目的是:将数据都转换为化为无量纲数据 。
  2. 求各特征对应的 熵 ,目的是:求权 。
  3. 求各特征所对应的 权重 。

一、特征缩放

特征缩放一般有两种方法:归一化 和 标准化 。

在进行熵值法之前,如果数据方向不一致时,需要进行提前数据处理,通常为正向化或者逆向化两种处理(统称为数据归一化处理)。

归一化(正向化)

公式如下:

image.png

归一化(逆向化)

公式如下:

image.png

就是将原数据
这个区间缩放到[0,1]区间内。

缺点:当 数据发生变化(增加、删除、修改) 时,最大值和最小值 会发生变化,需要 重新计算 。

标准化

公式如下: image.png

其中,μ  和 σ  分别代表数据的 均值 和 方差 。

二、求熵

使用上述 熵 的公式,即:

三、求权重

公式如下:

其中,k 代表 特征个数 。

这就求出了各特征对应的权重。

四、计算综合得分

熵权悖论的解释

由此可知,权重与信息熵冗余度d正相关,与信息熵e是负相关的。也就是说,方差越大,熵越小,包含的信息越多,权重应当越大。
这里与前面的结论相悖的原因就在于
熵权法计算熵的公式中,p不是各取值的比例,而是各个取值的相对大小。公式不一样,结论自然不一样了。

Python实现信息熵求权重

import pandas as pd
import numpy as np
import math


def nml(series):  # 正向指标归一化 减最小值的min-max方法
    l = []
    for i in series:
        l.append((i - series.min()) / (series.max() - series.min()))
    return pd.Series(l, name=series.name)

def nml_max(series): #负向指标归一化
    l = []
    for i in series:
        l.append((series.max() - i) / (series.max() - series.min()))
    return pd.Series(l, name=series.name)


def nmlzt(df): #归一化函数,对正负向指标分别调用nml()和nml_max()
    dfn = pd.DataFrame()
    for i in df.columns:
        if (i=='D'):
            dfn = pd.concat([dfn, nml_max(df[i])], axis=1)
        else:
            dfn = pd.concat([dfn, nml(df[i])], axis=1)
    # dfn为归一化的数据
    return dfn


def pij(df):  #求信息熵公式中的p,这里直接用取值除以取值总和,而不是数量的比例
    D = df.copy()
    for i in range(D.shape[1]):  # 列
        sum = D.iloc[:, i].sum()
        for j in range(D.shape[0]):  # 行
            D.iloc[j, i] = D.iloc[j, i] / sum
            # 算pij
    return D


def entropy(series):    #计算信息熵
    _len = len(series)

    def ln(x):
        if x > 0:
            return math.log(x)
        else:
            return 0

    s = 0
    for i in series:
        s += i * ln(i)
    return -(1 / ln(_len)) * s


def _result(dfij):  #求e、d、w并返回
    dfn = dfij.copy()
    w = pd.DataFrame(index=dfn.columns, dtype='float64')
    l = []
    for i in dfn.columns:
        l.append(entropy(dfn[i]))
    w['熵'] = l
    w['差异性系数'] = 1 - np.array(l)
    sum = w['差异性系数'].sum()
    l = []
    for i in w['差异性系数']:
        l.append(i / sum)
    w['权重'] = l
    return w

df = pd.read_csv('Blues_D.csv') #读取你需要计算的文件
df=df[['D','GTI']]  #选取需要计算的属性列
dfn = nmlzt(df) #归一化
dfij = pij(dfn) #求p
w = _result(dfij)   #求权重
w.to_excel('weight_info_entropy.xlsx', sheet_name='权重')#输出结果
dfn = dfn.set_index(df.index, drop=True)
print(dfn)
目录
相关文章
|
Kubernetes 安全 Docker
在 K8s 集群中创建 DERP 服务器
在 K8s 集群中创建 DERP 服务器
|
canal 编解码 人工智能
Google Earth Engine(GEE)——OSM水图层 OpenStreetMap中的全球地表水数据集(90m分辨率)
Google Earth Engine(GEE)——OSM水图层 OpenStreetMap中的全球地表水数据集(90m分辨率)
574 0
|
机器学习/深度学习 算法 决策智能
【深度学习】遗传算法
【深度学习】遗传算法
|
11月前
|
机器学习/深度学习 PyTorch 算法框架/工具
118_LLM模型量化与压缩:从理论到2025年实践技术详解
大型语言模型(LLM)在自然语言处理领域取得了前所未有的成功,但模型规模的快速增长带来了巨大的计算和存储挑战。一个典型的大型语言模型(如GPT-4或LLaMA 3)可能包含数千亿甚至万亿参数,需要数百GB甚至TB级的存储空间,并且在推理时需要大量的计算资源。这种规模使得这些模型难以在边缘设备、移动设备甚至资源有限的云服务器上部署和使用。
1663 3
|
数据采集 Web App开发 运维
动态内容加载的解决方案:Selenium与Playwright对比故障排查实录
本项目旨在解决亚航航班数据采集中的反爬挑战。初期使用Selenium遇到Cloudflare验证,后切换至Playwright仍触发反爬机制。通过引入代理IP轮换和UA策略,最终实现双方案并通过压力测试。Selenium适合模拟真人操作,而Playwright在执行速度和自动等待机制上表现更优,成功率高达95%。建议对强反爬网站优先采用Playwright,并配合完善的代理管理和请求特征模拟。
1145 1
动态内容加载的解决方案:Selenium与Playwright对比故障排查实录
|
文字识别 BI API
3.4K star!全能PDF处理神器开源!文档转换/OCR识别一键搞定
PDF-Guru 是一款开箱即用的全能型PDF处理工具,支持跨平台文档转换、智能OCR识别、多格式解析等核心功能。项目采用模块化架构设计,提供简洁的Web界面和API接口,开发者可快速集成到现有系统中。
1429 1
|
5G 索引
频域结构 | 带你读《5G 空口设计与实践进阶 》之十九
在频域,为满足多样带宽需求,NR 支持灵活可扩展的 Numerology。这相应也决定了 NR 在频域资源上的物理量度是可变的。
频域结构 | 带你读《5G 空口设计与实践进阶 》之十九
|
存储 安全 Docker
直接停掉docker后镜像都没了
7月更文挑战第12天
2820 7
|
运维 网络安全 Python
自动化运维:使用Ansible实现批量服务器配置
在快速迭代的IT环境中,高效、可靠的服务器管理变得至关重要。本文将介绍如何使用Ansible这一强大的自动化工具,来简化和加速批量服务器配置过程。我们将从基础开始,逐步深入到更复杂的应用场景,确保即使是新手也能跟上节奏。文章将不包含代码示例,而是通过清晰的步骤和逻辑结构,引导读者理解自动化运维的核心概念及其在实际操作中的应用。
|
前端开发 JavaScript
用最少的代码实现一个HTML可交互表格
该HTML页面展示了一个可交互的表格,用户可以通过点击表格行来高亮显示所选行。使用了基本的`<table>`结构,并通过CSS设置了表格样式及行悬停效果。JavaScript函数`toggleSelect`实现了行选中的切换功能。