熵权法综合评价+代码

2023-11-21 22:40
文章标签 代码 评价 综合 权法

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

熵权法

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

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

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

 

收集与整理

假设有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

欢迎关注我的公众号:star bottle

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



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

相关文章

C++使用栈实现括号匹配的代码详解

《C++使用栈实现括号匹配的代码详解》在编程中,括号匹配是一个常见问题,尤其是在处理数学表达式、编译器解析等任务时,栈是一种非常适合处理此类问题的数据结构,能够精确地管理括号的匹配问题,本文将通过C+... 目录引言问题描述代码讲解代码解析栈的状态表示测试总结引言在编程中,括号匹配是一个常见问题,尤其是在

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

Python中顺序结构和循环结构示例代码

《Python中顺序结构和循环结构示例代码》:本文主要介绍Python中的条件语句和循环语句,条件语句用于根据条件执行不同的代码块,循环语句用于重复执行一段代码,文章还详细说明了range函数的使... 目录一、条件语句(1)条件语句的定义(2)条件语句的语法(a)单分支 if(b)双分支 if-else(

MySQL数据库函数之JSON_EXTRACT示例代码

《MySQL数据库函数之JSON_EXTRACT示例代码》:本文主要介绍MySQL数据库函数之JSON_EXTRACT的相关资料,JSON_EXTRACT()函数用于从JSON文档中提取值,支持对... 目录前言基本语法路径表达式示例示例 1: 提取简单值示例 2: 提取嵌套值示例 3: 提取数组中的值注意

CSS3中使用flex和grid实现等高元素布局的示例代码

《CSS3中使用flex和grid实现等高元素布局的示例代码》:本文主要介绍了使用CSS3中的Flexbox和Grid布局实现等高元素布局的方法,通过简单的两列实现、每行放置3列以及全部代码的展示,展示了这两种布局方式的实现细节和效果,详细内容请阅读本文,希望能对你有所帮助... 过往的实现方法是使用浮动加

JAVA调用Deepseek的api完成基本对话简单代码示例

《JAVA调用Deepseek的api完成基本对话简单代码示例》:本文主要介绍JAVA调用Deepseek的api完成基本对话的相关资料,文中详细讲解了如何获取DeepSeekAPI密钥、添加H... 获取API密钥首先,从DeepSeek平台获取API密钥,用于身份验证。添加HTTP客户端依赖使用Jav

Java实现状态模式的示例代码

《Java实现状态模式的示例代码》状态模式是一种行为型设计模式,允许对象根据其内部状态改变行为,本文主要介绍了Java实现状态模式的示例代码,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来... 目录一、简介1、定义2、状态模式的结构二、Java实现案例1、电灯开关状态案例2、番茄工作法状态案例

nginx-rtmp-module模块实现视频点播的示例代码

《nginx-rtmp-module模块实现视频点播的示例代码》本文主要介绍了nginx-rtmp-module模块实现视频点播,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习... 目录预置条件Nginx点播基本配置点播远程文件指定多个播放位置参考预置条件配置点播服务器 192.

CSS自定义浏览器滚动条样式完整代码

《CSS自定义浏览器滚动条样式完整代码》:本文主要介绍了如何使用CSS自定义浏览器滚动条的样式,包括隐藏滚动条的角落、设置滚动条的基本样式、轨道样式和滑块样式,并提供了完整的CSS代码示例,通过这些技巧,你可以为你的网站添加个性化的滚动条样式,从而提升用户体验,详细内容请阅读本文,希望能对你有所帮助...