数学建模笔记(四):熵权

news2024/9/23 17:18:10

背景&基本思想介绍

        在实际的评价类问题中,在前面所说的层次分析法以及Topsis法中,指标权重的确定往往是通过主观的评价得来的,如果在没有专家的情况下,我们自己的权重分配往往可能带有一定的主观性,有没有一种可以客观确定指标的权重的方法呢?这就是本次要介绍的熵权法的由来。

        总的来说,从方法的名字来看我们可以知道,所谓熵,就是离散或者说混乱程度,熵权法的核心思想在于,我们可以通过一个指标在不同的评价对象上的离散程度来确定这个指标的重要性。这样讲可能有点抽象,下面我来举一个例子帮助大家理解。

       假如现在要对几个不同的城市的空气质量情况进行评估排名,每个城市在进行评价的时候有如下几个指标:第一个是PM2.5浓度,第二个是空气能见度,第三个是空气中含氮化合物的浓度,第四个是含硫化合物的浓度,在这几个城市中经过调查,发现他们的含氮化合物的浓度基本一致,那么大家想一想,当我们在进行评估的时候,极端情况下,假如我们只能拿出一个指标来评判,我们会拿含氮化合物浓度这个指标来进行评估吗?相信大家肯定都不会选择这个指标,理由很简单,因为这几个城市都是一样的,那怎么进行评价呢?

        所以相信大家能够从这个例子中大概了解到熵权法的一些思想,所谓离散程度,就是指这个指标在几个对象的身上的差异大不大,差异越大,离散程度越大,那么这个指标在评价的过程中,所能发挥的作用越大;反之,如果差异不大,离散程度越低,那么这个指标对评价的帮助就越小。我们肯定是要给帮助大的指标分配更多的权重,给帮助越小的分配更少的权重,这就是熵权法的基本思想。

方法具体实现

在所有的工作开始前,我么还要偶先对指标进行正向化处理,这一点在Topsis法的文章中有提及,大家可以看一下这个文章:数学建模笔记(2):Topsis分析法。

矩阵的标准化处理

        首先还是一样,标准化的目的就是消除量纲的影响,这一点在前面的文章中已经有所提及,由于不同的物理量的单位不同,因此我们要消除因为单位不同所带来的数据上的差异影响。

        这里采用的方法还是和Topsis法的处理方法一样,即用每一个指标所在的列的平方和的二次方根作为分母,每一个元素除以该列所有元素的平方和的二次方根即可。(PS:这里的矩阵,每一行是一个评价对象,每一列是一个指标)。

概率矩阵计算

虽然这个概率矩阵的名字听起来挺唬人,但是本质上就是在前面的标准化矩阵的基础上,再对每一列(指标是列)进行归一化处理,即每一列的元素除以这列元素的和,让这个列所有的元素的和为一即可。

计算熵权

这里的熵权是针对每一个指标来说的,具体的公式如下:

 每一个e_{j}都是一个指标的熵权,最后得到的W_{j}是进行归一化处理之后的最终结果(权重肯定是和为1才对嘛)。

这样的话,最终的W_{j }就是每一个指标的熵权,权重分配就正式完成。

代码实现

下面是熵权法的MatLab代码,供大家参考,是我自己写的,难免会有错误,还请大家指正。

clc;
clear;
X=input("请输入正向化后的指标矩阵:");
[n,m]=size(X);
%对矩阵进行标准化操作
for i=1:size(X,2)
    judge=find(X<0);  %find函数如果找不到在矩阵X中小于0的数就会返回空
    if isempty(judge)
        Z(:,i)=X(:,i)/(sum(X(:,i).^2).^(1/2));%针对没有负数的情况,采用的是每一列除以这一列的平方和的归一化方法
    else
        Z(:,i)=(X(:,i)-min(X(:,i)))/(max(X(:,i))-min(:,i)); %有负数就采用这种办法
    end
end
%另外一种标准化的代码
%Z=X./repmat(sum(X.*X).^0.5,n,1);%相当于是先利用sum函数是计算得到矩阵的每一列之和,得到每列和开方的行向量,再把这个行向量沿着行方向复制n次得到一个和原来矩阵大小一样的矩阵,进行逐项相除。
disp("标准化后的矩阵为:")
disp(Z);
%计算熵权
for j=1:m
   P(:,j)=Z(:,j)/sum(Z(:,j));%对标准化后的矩阵进行归一化,即每一列之和都变为1
   e(j)=-sum(P(:,j).*mylog(P(:,j)))/log(n);%按照公式计算熵权
   d(j)=1-e(j);
end
disp("归一化后的矩阵为:")
disp(P);
disp("每个指标的熵权为:")
disp(e);
disp(d);
W=d/sum(d);   %对熵权进行归一化处理
disp("最终经过归一化处理的熵权为:")
disp(W);

由于害怕出现log函数中有0的情况,还有一个mylog函数文件

function [res]=mylog(j)
    n=length(j);
    res=zeros(n,1);
    for i=1:n
        if j(i)==0
            res(i)=0;
        else
            res(i)=log(j(i));
        end
    end
end

好了以上就是熵权法的介绍,希望能够得到大家的一键三连~~~

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

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

相关文章

linux系统离线安装docker并配置阿里云镜像源

制作docker.service文件 创建docker.service文件 cd /etc/systemd/system/ touch docker.service编辑docker.service文件 vim docker.service// 注意&#xff0c;将其中的ip地址&#xff0c;改成您的服务器地址&#xff0c;其它参数不用改。 //--insecure-registry192.168.8…

代码随想录算法day22 | 回溯算法part04 | 491.递增子序列,46.全排列,47.全排列 II

491.递增子序列 本题和大家做过的 90.子集II 非常像&#xff0c;但又很不一样&#xff0c;很容易掉坑里。 力扣题目链接(opens new window) 给定一个整型数组, 你的任务是找到所有该数组的递增子序列&#xff0c;递增子序列的长度至少是2。 示例: 输入: [4, 6, 7, 7]输出: [[4,…

【学习笔记】时间序列模型(ARIMA)

文章目录 前言一、时间序列时间序列数据 二、ARIMA 模型大纲模型前提平稳性检验 差分整合移动平均自回归模型 ARIMA(p,q,d)自回归模型 (AR( p ))移动平均模型 (MA( q ))自回归移动平均模型(ARMA(p,q))差分自回归移动平均模型 ARIMA(p,d,q) 确定 p&#xff0c;q结果分析和模型检…

SpringBoot集成kafka-消费者批量消费消息

SpringBoot集成kafka-消费者批量消费消息 1、消费者2、生产者3、application.yml配置文件4、实体类5、生产者发送消息测试类6、测试6.1、测试启动生产者6.2、测试启动消费者 1、消费者 设置批量接收消息 package com.power.consumer;import org.apache.kafka.clients.consume…

IC-Light容器构建详细指南

一、介绍 IC-Light 是一个操纵图像照明的项目&#xff0c;能够让一张普普通通的照片焕发光彩。 IC-Light&#xff0c;全称为“Imposing Consistent Light”&#xff0c;是一款由 AI 图像处理专家张吕敏&#xff08;ControlNet 的作者&#xff09;精心开发的创新工具。主要用于…

启用 UFW 防火墙后如何打开 80 和 443 端口?

UFW&#xff08;Uncomplicated Firewall&#xff09;是一款 Linux 系统上用户友好的管理防火墙规则的工具。它简化了控制网络流量的过程&#xff0c;使用户更容易开放或阻止端口。 本文将引导您使用 UFW 打开端口 80 (HTTP) 和 443 (HTTPS) 端口。您将了解如何启用这些端口&am…

uni-app项目搭建和模块介绍

工具:HuilderX noed版本:node-v17.3.1 npm版本:8.3.0 淘宝镜像:https://registry.npmmirror.com/ 未安装nodejs可以进入这里https://blog.csdn.net/a1241436267/article/details/141326585?spm1001.2014.3001.5501 目录 1.项目搭建​编辑 2.项目结构 3.使用浏览器运行…

华为Cloud连接配置

Cloud(云)连接意思为本地电脑和eNSP中的虚拟的VRP系统连接的 配置Cloud 先添加UDP 再添加需要使用的网卡 网卡建议使用虚拟机的网卡&#xff0c;如果没有虚拟机也可以使用其他网卡&#xff0c;自己设定一下IP就行 端口映射设置 配置R1 [R1]int e0/0/0 [R1-Ethernet0/0/0]ip …

B. 不知道该叫啥

题意&#xff1a;求长度为n的数列方案数&#xff0c;数列需满足两个条件&#xff1a;1.均为正整数。2.相邻两个数乘积不能超过m 思路&#xff1a;考虑dp。 设表示前i个点以j结尾的方案数&#xff0c;则有&#xff1a; 可以得出&#xff1a; 双指针数论分块解决。把每个m/i相…

一个下载镜像非常快的网站--华为云

1、镜像的下载飞速 链接&#xff1a;mirrors.huaweicloud.com/ubuntu-releases/24.04/ 下载一个的ubuntu24.04的镜像文件&#xff0c;5.7G的大文件&#xff0c;不到1分钟就下完毕了&#xff0c; 比起阿里云下载的速度600K/S,这个速度是100多倍。 非常的神速&#xff0c;非常…

如何选择高品质科研实验室用太阳光模拟器

概述 太阳光模拟器是一种能够模拟太阳光照射条件的设备&#xff0c;主要用于实验室环境中对太阳能相关材料和设备进行性能测试。这类模拟器能够提供与自然太阳光谱相似的光照&#xff0c;同时还能精确控制光照强度和照射角度&#xff0c;以满足不同测试需求。 对于被归类为太…

Leetcode 104. 二叉树的最大深度 C++实现

Leetcode 104. 二叉树的最大深度 问题&#xff1a;给定一个二叉树root&#xff0c;返回其最大深度。 二叉树的最大深度是指从根节点到最远叶子节点的最长路径上的节点数。 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* …

【Linux篇】Linux的用户和权限

目录 1. 认识Linux的root用户&#xff08;超级管理员&#xff09; 1.1 介绍 1.2 su命令和exit命令 1.3 sudo命令 为普通用户配置sudo认证 2. 用户与用户组 2.1 用户组管理 2.2 用户管理 2.3 getent命令 3. 查看权限控制信息 3.1 认知权限信息 3.2 rwx含义 r&#x…

巴恩斯利蕨数学公式及源码实现——JavaScript版

为什么要写这篇文章 本篇接《张侦毅&#xff1a;巴恩斯利蕨数学公式及源码实现》。之前文章中源码的编程语言用的是Java&#xff0c;JDK的版本为8&#xff0c;现在我的JDK版本已经升级到22了&#xff0c;在新版本JDK中&#xff0c;原来的JApplet方法已经被废弃&#xff0c;不能…

云原生之全链路分布式跟踪系统 Zipkin和SkyWalking

贪多嚼不烂 Pinpoint 就不对比了 参考 APM系统简单对比(zipkin,pinpoint和skywalking) springcloud 看云 Zipkin和SkyWalking都是流行的分布式跟踪系统&#xff0c;但它们的设计和实现有明显的不同。 以下是它们之间的一些对比&#xff1a; 数据存储&#xff1a; Zipk…

Linux与Windows的文件与目录操作API汇总整理

文件和目录操作是编程中非常基础且常用的部分&#xff0c;涉及到文件的创建、读写、删除以及目录的创建、删除等功能。下面是文件和目录操作的汇总整理&#xff0c;包括常见的API及其用途&#xff1a; 文件操作 POSIX 系统&#xff08;如 Linux 和 macOS&#xff09; 打开文件…

Python二级知识点

在阅读之前&#xff0c;感谢大家的关注和点赞。祝你们都能心想事成、健健康康。 一.数据流程图 一般这道题是经常考的&#xff0c;有向箭头--->表示数据流。圆圈○表示加工处理。 二.字典如何比较大小 字典类型是如何比较大小的呢&#xff0c;是使用字典的键来比较大小&…

Python 使用everything的相关模块,创建极其快速的文件搜索和管理工具

在这篇博客中&#xff0c;我将分享如何使用 Python 的 everytools库构建一个简单的文件搜索和管理工具。这个工具允许用户搜索文件、查看文件路径、导出文件信息到 Excel&#xff0c;以及生成配置文件。 C:\pythoncode\new\everythingtools.py 项目概述 这个工具的主要功能包…

mysql binlog 全量与增量备份

mysql binlog 全量与增量备份 mysql binlog常用操作 https://blog.csdn.net/xyy1028/article/details/124446625 mysqldump mysqlbinlog 增量备份 mysql的增量备份 https://blog.51cto.com/u_16213572/10976496 mysql全量备份与增量备份 — vip https://blog.51cto.com/hehe1…

Java学习_20_File以及IO流

文章目录 前言一、FileFile中常见的成员方法判断和获取创建和删除获取和遍历 二、IO流IO流体系结构字节流字节输出流&#xff1a;FileOutputStream字节输入流FileInputStrea文件拷贝try……catch异常处理中文乱码现象 字符流字符流读取FileReader字符流输出FileWriter底层原理 …