熵权法(变异系数法)

熵权法(变异系数法)

一种客观赋权方法,它根据指标的变异程度来确定指标的权重,变异程度越大,说明该指标所包含的信息量越大,相应的权重也就越大。以下是熵权法的详细介绍:

概率与信息量的关系

概率P(x)越小,信息量I(x)越大,原先信息越不靠谱

概率P(x)越大,信息量I(x)越小,原先信息越靠谱

比如一个人,给大家的第一印象是一个老好人,结果一段时间后,大家发现他是一个腹黑man,那么一开始我们掌握的信息就少,获得的就越多.这部分就越重要.

反过来,一个一直在大家心目中的形象不太好的人,做出一些坏事,我们通过这个事情获得的就很少,因为我们一开始就已经掌握了

所以

信息熵:平均而言发生一个时间我们得到信息量的大小

当p(xi)都相等时,H(x)最大,=In (n)

形象的说,就是每一个事情的概率都是一样的,所以你要获得新的信息量也都差不多,所以你面对同等概率的选择,对你来说,选谁你的期望都是一样的,你就无法通过这个选择获取更多的信息

Eg:我们已知外面有一个人请问他是男是女?

显然,50%的概率是男,50%概率是女 ,此时的H(s)=-0.5*log2 0.5 - 0.5*log2 0.5

这里的logn 的n是对象数

但是如果我们知道了外面的人在抽烟,根据网上的数据

那么就会有5/6的概率是男生

所以信息熵的本质就是我们所期望的掌握的信息的量

之后以下面的例题来分析:

甘雨同学毕业后参加相亲,现有表中5位候选人,她想从中挑出一位如意郎君,现请你帮她为年龄、身高、长相、学历、收入分配权重,进而求得最后总分,最高分者就是甘雨的结婚对象.

基本原理

1,数据准备:

假设我们有个m评价对象,n个评价指标,构成原始数据矩阵X=(xij),大小是m*n,其中xij表示第i个评价对象在第j个评价指标上的原始数据。

(也就是上面的表格)

2,数据标准化

由于不同指标的量纲和数量级可能不同,需要对原始数据进行标准化处理,以消除量纲的影响。标准化的方法根据指标的性质分为正向/极大型指标(效益指标,越大越好)和负向/极小型指标(成本指标,越小越好):

(1)正向化处理:

显然,上面的数据中,长相和学历,收入什么的都应该是正向指标,但是具体的也不一定都是越高越好的,比如说身高,要是什么3米就太高了,还有颜值可能也不需要太高,可能红颜祸水,

在这里,我们的甘雨同学的标准是,越年轻越好,学历越高越好,收入越高越好,身高最好180,长相最好80-90,这里的年龄因为是越小越好,所以我们要进行一下正向化的处理,一,将极小型数据转化为极大型数据:

 [我感觉这个例子不太好,1岁那岂不是更年轻了(不是)但是还是按照up的记了)

二,中间型的指标,身高180最好这种事中间型指标,也需要正向化:

三,区间型指标:像长相这种80-90这种在某个区间的也需要正向化

下面假设区间是[a,b]

这里的M:

按照上面的步骤,我们把所有的数据正向化了

(2)标准化处理

假设有4个数.,那么对应得到的标准化后的数据就是

标准化后得到的矩阵就是标准化的矩阵Z ,

如果z中有负元素,那么

然后计算各个方案的对应的指标,在整个指标的比重.我们就把这个看作是概率,然后就可以

计算熵权了

3,计算信息熵和熵权

为了直接获得[0,1]的数据,我们将信息熵转换为

因为信息熵越大,信息效用越低,所以信息效用值 d = 1-e

最后得出的是:

下面是代码

(来自b站大师兄):

先是一些正向化的代码:

(1)极小型转换为极大型:

function [res] = Min2Max(X)

res = max(X) - X;

end

(2)中间型转换为极大型:

function [res] = Mid2Max(X, best)//传入向量和最大的数

M = max(abs(X - best));

res = 1 - abs(X - best)/M;

end

(3)区间型转换为极大型

function [res] = Int2Max(X, a, b)

M = max(a - min(X), max(X) - b);

for i = 1 : size(X)

if(X(i) < a)

X(i) = 1 - (a - X(i))/M;

elseif (X(i) >= a && X(i) <= b)

X(i) = 1;

elseif (X(i) > b)

X(i) = 1 - (X(i) - b)/M;

end

end

res = X;

end

disp('***************正在进行正向化...***************');

vec = input('请输入要正向化的向量组,请以数组的形式输入,如[1 2 3]表示1,2,3列需要正向化,不需要正向化请输入-1\n') %注意输入函数这里是单引号

if (vec ~= -1)

for i = 1 : size(vec,2)

flag = input(['第' num2str(vec(i)) '列是哪类数据(【1】:极小型 【2】:中间型 【3】:区间型),请输入序号:\n']);

if(flag == 1)%极小型

X(:,vec(i)) = Min2Max(X(:,vec(i)));

elseif (flag == 2) % 注意这里的else和if是连在一起的

best = input('请输入中间型的最好值:\n');

temp = X(:,vec(i));

X(:,vec(i)) = Mid2Max(X(:,vec(i)), best);

elseif (flag == 3)

arr = input('请输入最佳区间,按照“[a,b]”的形式输入:\n');

X(:,vec(i)) = Int2Max(X(:,vec(i)), arr(1), arr(2));

end

end

disp('所有的数据均已完成正向化!')

end

%% 标准化

disp('***************正在进行标准化...***************');

[n,m] = size(X);

% 先检查有没有负数元素

isNeg = 0;

for i = 1 : n

for j = 1 : m

if(X(i,j) < 0)

isNeg = 1;

break;

end

end

end

if (isNeg == 0)

squere_X = (X.*X);

sum_X = sum(squere_X,1).^0.5; %按列求和,再开方

stand_X = X./repmat(sum_X, n, 1);

else

max_X = max(X,[],1); %按照列找出最大元素

min_X = min(X,[],1); %按照列找出最小元素

stand_X = X - repmat(min_X,n,1) ./ (repmat(max_X,n,1) - repmat(min_X,n,1));

end

disp('标准化完成!')

%% 计算样本概率、信息熵和熵权

disp('***************正在用熵权法确定权值...***************');

P = stand_X ./ repmat(sum(stand_X),n,1);

% 由于ln(0)没有定义,所以我们需要人为的把概率为0的手动指定为一个接近与0的数

for i = 1 : n

for j = 1 : m

if(P(i,j) == 0)

P(i,j) = 0.00001;

end

end

end

H_x = sum(-P .* log(P)); %注意在MATLAB中,想要算ln(x)应该输入log(x);想要算lg(x)则应该输入log10(x)

e_j = H_x ./ log(n);

d_j = 1 - e_j;

%进行归一化,获得熵权

disp('熵权完成,权值为:');

w = d_j ./ sum(d_j)

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于当前最前沿的前端(Vue3 + Vite + Antdv)和后台(Spring boot)实现的低代码开发平台

项目是一个基于当前最前沿的前端技术栈&#xff08;Vue3 Vite Ant Design Vue&#xff0c;简称Antdv&#xff09;和后台技术栈&#xff08;Spring Boot&#xff09;实现的低代码开发平台。以下是对该项目的详细介绍&#xff1a; 一、项目概述 项目名称&#xff1a;lowcode-s…

JAVA:利用 RabbitMQ 死信队列实现支付超时场景的技术指南

1、简述 在支付系统中&#xff0c;订单支付的超时自动撤销是一个非常常见的业务场景。通常用户未在规定时间内完成支付&#xff0c;系统会自动取消订单&#xff0c;释放相应的资源。本文将通过利用 RabbitMQ 的 死信队列&#xff08;Dead Letter Queue, DLQ&#xff09;来实现…

逻辑测试题

https://blog.csdn.net/qq_39081315/article/details/121393597 先生成一个点&#xff0c;每生成一个点判断距离&#xff0c;角度&#xff0c;满足加入存点的容器&#xff0c;直到容器大小为4。 随机生成点&#xff1a; 分区域&#xff1a;最大距离20&#xff0c;以20为正方形…

图解Git——分支开发工作流《Pro Git》

分支开发工作流 由于分支管理的便捷&#xff0c; 才衍生出这些典型的工作模式&#xff0c;你可以根据项目实际情况选择。 1. 长期分支 适用于持续开发和发布周期长的项目。常见的长期分支包括&#xff1a; master&#xff1a;只保留稳定的代码&#xff0c;通常用于生产环境。…

IOS界面传值-OC

1、页面跳转 由 ViewController 页面跳转至 NextViewController 页面 &#xff08;1&#xff09;ViewController ViewController.h #import <UIKit/UIKit.h>interface ViewController : UIViewControllerend ViewController.m #import "ViewController.h" …

【Spring Boot 应用开发】-04-01 自动配置-数据源-连接池

资源关闭 还记得上一节中的这段代码么&#xff1f; try {if (resultSet ! null) resultSet.close();if (preparedStatement ! null) preparedStatement.close();if (connection ! null) connection.close(); } catch (SQLException e) {e.printStackTrace(); }这是我们在查询…

BUUCTF:misc刷题记录4(会持续更新的)

目录 爱因斯坦 ningen 做题总结&#xff1a; 爱因斯坦 下载解压后&#xff0c;得到一张图片。 老套路&#xff0c;还是先查看一下图片基本属性。只看到这串信息&#xff0c;不知道有啥用。 然后用010进行查看 发现图片里面隐藏了一个压缩包&#xff0c;压缩包里面有个flag.t…

Open FPV VTX开源之嵌入式OSD配置

Open FPV VTX开源之嵌入式OSD配置 1. 源由2. 安装3. 配置步骤一&#xff1a;备份/etc/telemetry.conf步骤二&#xff1a;修改/etc/telemetry.conf步骤三&#xff1a;配置时区步骤四&#xff1a;重启摄像头 4. 实测5. 参考资料 1. 源由 穿越机模拟图传延迟通常在10ms左右。 最…

JavaScript动态渲染页面爬取之Splash

Splash是一个 JavaScript渲染服务,是一个含有 HTTP API的轻量级浏览器,它还对接了 Python 中的 Twisted 库和 OT库。利用它&#xff0c;同样可以爬取动态渲染的页面。 功能介绍 利用 Splash&#xff0c;可以实现如下功能&#xff1a; 异步处理多个网页的渲染过程:获取渲染后…

HTTP详解——HTTP基础

HTTP 基本概念 HTTP 是超文本传输协议 (HyperText Transfer Protocol) 超文本传输协议(HyperText Transfer Protocol) HTTP 是一个在计算机世界里专门在 两点 之间 传输 文字、图片、音视频等 超文本 数据的 约定和规范 1. 协议 约定和规范 2. 传输 两点之间传输&#xf…

云服务信息安全管理体系认证,守护云端安全

在数据驱动的时代&#xff0c;云计算已成为企业业务的超级引擎&#xff0c;推动着企业飞速发展。然而&#xff0c;随着云计算的广泛应用&#xff0c;信息安全问题也日益凸显&#xff0c;如同暗流涌动下的礁石&#xff0c;时刻威胁着企业的航行安全。这时&#xff0c;云服务信息…

nacos环境搭建以及SpringCloudAlibaba脚手架启动环境映射开发程序

1&#xff1a;下载nacos 地址&#xff1a;https://github.com/alibaba/nacos/tags 2:选择server的zip包下载 3:启动mysql服务&#xff0c;新建数据库&#xff1a;nacos_yh 4&#xff1a;解压下载的nacos_server 进入conf目录 5&#xff1a;mysql运行sql脚本变得到下面的表 6&a…

stable diffusion 量化学习笔记

文章目录 一、一些tensorRT背景及使用介绍1&#xff09;深度学习介绍2&#xff09;TensorRT优化策略介绍3&#xff09;TensorRT基础使用流程4&#xff09;dynamic shape 模式5&#xff09;TensorRT模型转换 二、TensorRT转onnx模型1&#xff09;onnx介绍2&#xff09;背景知识&…

设计模式 行为型 访问者模式(Visitor Pattern)与 常见技术框架应用 解析

访问者模式&#xff08;Visitor Pattern&#xff09;是一种行为设计模式&#xff0c;它允许你在不改变元素类的前提下定义作用于这些元素的新操作。这种模式将算法与对象结构分离&#xff0c;使得可以独立地变化那些保存在复杂对象结构中的元素的操作。 假设我们有一个复杂的对…

C++中引用参数与指针参数的区别与联系详解

在C++中,函数参数可以通过值传递、引用传递和指针传递。虽然指针传递在C和C++中都非常常见,但C++引入了引用类型,使得引用传递变得更加直接和易用。本文将详细介绍函数中引用参数和指针参数的区别与联系,并通过C++语言代码示例加以说明。 一、基本概念 值传递(Pass by Val…

初识JVM HotSopt 的发展历程

目录 导学 目前企业对程序员的基本要求 面向的对象 实战 学习目标 JVM 是什么 JVM 的三大核心功能 各大 JVM look 看一下虚拟机 HotSopt 的发展历程 总结 导学 目前企业对程序员的基本要求 面向的对象 实战 学习目标 JVM 是什么 JVM 的三大核心功能 即时编译 主要是…

html中鼠标位置信息

pageX&#xff1a;鼠标距离页面的最左边的距离&#xff0c;包括滚动条的长度。clientX&#xff1a;鼠标距离浏览器视口的左距离&#xff0c;不包括滚动条。offsetX&#xff1a;鼠标到事件源左边的距离。movementX&#xff1a;鼠标这次触发的事件的位置相对于上一次触发事件的位…

RabbitMQ 高可用方案:原理、构建与运维全解析

文章目录 前言&#xff1a;1 集群方案的原理2 RabbitMQ高可用集群相关概念2.1 设计集群的目的2.2 集群配置方式2.3 节点类型 3 集群架构3.1 为什么使用集群3.2 集群的特点3.3 集群异常处理3.4 普通集群模式3.5 镜像集群模式 前言&#xff1a; 在实际生产中&#xff0c;RabbitM…

【容器逃逸实践】挂载/dev方法

0、前置知识 怎么在容器里面执行命令&#xff0c; 有几种方法 # 不进入容器&#xff0c;创建并启动一个新的容器 $ docker run -itd --name ubuntu-test ubuntu /bin/bash # 进入容器&#xff0c;创建并启动一个新的容器 $ docker run -itd --name ubuntu-test ubuntu /bin…

linux: 文本编辑器vim

文本编辑器 vi的工作模式 (vim和vi一致) 进入vim的方法 方法一:输入 vim 文件名 此时左下角有 "文件名" 文件行数,字符数量 方法一: 输入 vim 新文件名 此时新建了一个文件并进入vim,左下角有 "文件名"[New File] 灰色的长方形就是光标,输入文字,左下…