MATLAB熵权法综合评价+代码

2023-11-21 22:40

本文主要是介绍MATLAB熵权法综合评价+代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

熵权法

熵值法的主要目的是对指标体系进行赋权

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

熵值法是一种客观赋权方法,,借鉴了信息熵思想,它通过计算指标的信息熵,根据指标的相对变化程度对系统整体的影响来决定指标的权重,即根据各个指标标志值的差异程度来进行赋权,从而得出各个指标相应的权重,相对变化程度大的指标具有较大的权重。

收集与整理

假设有m个待评价样本,n项评价指标,形成原始指标数据矩阵:

其中Xij表示第 i 个样本第 j 项评价指标的数值。

对于某项指标Xj,样本的离散程度越大,则该指标在综合评价中所起的作用就越大。如果该指标的标志值全部相等,则表示该指标在综合评价中不起作用。

数据标准化处理

为消除因量纲不同对评价结果的影响,需要对各指标进行标准化处理。

若所用指标的值越大越好(正向指标:)

若所用指标的值越小越好(负向指标:)

其中xj为第j项指标值,  xmax为第j项指标的最大值,  xmin为第j项指标的最小值。或者:

权重计算

计算第 j 个指标中,第 i 个样本标志值的权重:

因此,可以建立数据的比重矩阵

计算第j个指标的熵值

其中,常数

保证0<=ej<=1,即最大为1
所以,第j个指标的熵值为

定义第j个指标的差异程度

熵值法根据各个指标标志值的差异程度来进行赋权,从而得出各个指标相应的权重

定义权重

综合评价

原理讲解引自:https://blog.csdn.net/qq_42374697/article/details/105901229 

题目

评价下表中20条河流的水质情况。(熵权法和优劣解距离法对比)
注:含氧量越高越好;PH值越接近7越好;细菌总数越少越好;植物性营养物量介于10‐20之间最佳,超过20或低于10均不好。

河流

含氧量(ppm)

PH值

细菌总数(个/mL)

植物性营养物量(ppm)

A

4.69

6.59

51

11.94

B

2.03

7.86

19

6.46

C

9.11

6.31

46

8.91

D

8.61

7.05

46

26.43

E

7.13

6.5

50

23.57

F

2.39

6.77

38

24.62

G

7.69

6.79

38

6.01

H

9.3

6.81

27

31.57

I

5.45

7.62

5

18.46

J

6.19

7.27

17

7.51

K

7.93

7.53

9

6.52

L

4.4

7.28

17

25.3

M

7.46

8.24

23

14.42

N

2.01

5.55

47

26.31

O

2.04

6.4

23

17.91

P

7.73

6.14

52

15.72

Q

6.35

7.58

25

29.46

R

8.29

8.41

39

12.02

S

3.54

7.27

54

3.16

T

7.44

6.26

8

28.41


熵权法

.mat数据:在MATLAB里面随便创建一个变量,将表格中的数据粘贴进变量中,再另存为.mat数据就行。

main.m

%% 数据读取
clear,clc
load rivers_data.mat
%% 正向化处理
[n,m] = size(datas_matrix);
% 正向化处理的数据所在列
Pos = [2,3,4];
% 指标类型:1:极小型,2:中间型,3:区间型
ch = [2,1,3];
% 循环处理每一列
for i = 1 : size(Pos,2)datas_matrix(:,Pos(i)) = Forward_processing(datas_matrix(:,Pos(i)),ch(i),Pos(i));
end%% 矩阵标准化
datas_S_matrix = datas_matrix ./ repmat(sum(datas_matrix.*datas_matrix) .^ 0.5, n, 1);%%
model = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T"];
%% 熵权法
p = datas_S_matrix./sum(datas_S_matrix);
k = 1/log(n);
r = zeros(n,m);
for i = 1:nfor j = 1:mif p(i,j) == 0r(i,j) = 0;elser(i,j) = log(p(i,j));endend
end
e = -k*sum(p.*r,1);
d = ones(1,m)-e;
weight = d./sum(d);
score = sum(weight.*datas_S_matrix,2);
results1 = 0 + (100-0)/(max(score)-min(score)).*(score - min(score));
[sorted_score,index] = sort(results1 ,'descend');
rivers1 = [];
for i = 1:nrivers1 = [rivers1;model(index(i))];
end
s = [rivers1,sorted_score];%% 绘图
bar(sorted_score);
title('熵权法')
set(gca,'XTick',1:20)
set(gca, 'xticklabel',{rivers1{1:20}});%% 保存到文件
xlswrite('output.xls',s,'Sheet1');

Forward_processing.m

function [posit_x] = Forward_processing(x,type,~)if type == 1 %极小型%正向化posit_x = max(x) - x;elseif type == 2 %中间型best = 7;M = max(abs(x-best));posit_x = 1 - abs(x-best) / M;elseif type == 3 %区间型a = 10;b = 20;r_x = size(x,1);M = max([a-min(x),max(x)-b]);posit_x = zeros(r_x,1);for i = 1: r_xif x(i) < aposit_x(i) = 1-(a-x(i))/M;elseif x(i) > bposit_x(i) = 1-(x(i)-b)/M;elseposit_x(i) = 1;endendend
end

这篇关于MATLAB熵权法综合评价+代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/405609

相关文章

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

使用Spring Cache本地缓存示例代码

《使用SpringCache本地缓存示例代码》缓存是提高应用程序性能的重要手段,通过将频繁访问的数据存储在内存中,可以减少数据库访问次数,从而加速数据读取,:本文主要介绍使用SpringCac... 目录一、Spring Cache简介核心特点:二、基础配置1. 添加依赖2. 启用缓存3. 缓存配置方案方案

MySQL的配置文件详解及实例代码

《MySQL的配置文件详解及实例代码》MySQL的配置文件是服务器运行的重要组成部分,用于设置服务器操作的各种参数,下面:本文主要介绍MySQL配置文件的相关资料,文中通过代码介绍的非常详细,需要... 目录前言一、配置文件结构1.[mysqld]2.[client]3.[mysql]4.[mysqldum

Python多线程实现大文件快速下载的代码实现

《Python多线程实现大文件快速下载的代码实现》在互联网时代,文件下载是日常操作之一,尤其是大文件,然而,网络条件不稳定或带宽有限时,下载速度会变得很慢,本文将介绍如何使用Python实现多线程下载... 目录引言一、多线程下载原理二、python实现多线程下载代码说明:三、实战案例四、注意事项五、总结引

IDEA与MyEclipse代码量统计方式

《IDEA与MyEclipse代码量统计方式》文章介绍在项目中不安装第三方工具统计代码行数的方法,分别说明MyEclipse通过正则搜索(排除空行和注释)及IDEA使用Statistic插件或调整搜索... 目录项目场景MyEclipse代码量统计IDEA代码量统计总结项目场景在项目中,有时候我们需要统计

MySQL设置密码复杂度策略的完整步骤(附代码示例)

《MySQL设置密码复杂度策略的完整步骤(附代码示例)》MySQL密码策略还可能包括密码复杂度的检查,如是否要求密码包含大写字母、小写字母、数字和特殊字符等,:本文主要介绍MySQL设置密码复杂度... 目录前言1. 使用 validate_password 插件1.1 启用 validate_passwo

MySQL实现多源复制的示例代码

《MySQL实现多源复制的示例代码》MySQL的多源复制允许一个从服务器从多个主服务器复制数据,这在需要将多个数据源汇聚到一个数据库实例时非常有用,下面就来详细的介绍一下,感兴趣的可以了解一下... 目录一、多源复制原理二、多源复制配置步骤2.1 主服务器配置Master1配置Master2配置2.2 从服

Go语言使用net/http构建一个RESTful API的示例代码

《Go语言使用net/http构建一个RESTfulAPI的示例代码》Go的标准库net/http提供了构建Web服务所需的强大功能,虽然众多第三方框架(如Gin、Echo)已经封装了很多功能,但... 目录引言一、什么是 RESTful API?二、实战目标:用户信息管理 API三、代码实现1. 用户数据