MATLAB小技巧(18)矩阵分析--熵权法
前言
MATLAB进行图像处理相关的学习是非常友好的,可以从零开始,对基础的图像处理都已经有了封装好的许多可直接调用的函数,这个系列文章的话主要就是介绍一些大家在MATLAB中常用一些概念函数进行例程演示!
熵权法,物理学名词,按照信息论基本原理的解释,信息是系统有序程度的一个度量,熵是系统无序程度的一个度量;根据信息熵的定义,对于某项指标,可以用熵值来判断某个指标的离散程度,其信息熵值越小,指标的离散程度越大, 该指标对综合评价的影响(即权重)就越大,如果某项指标的值全部相等,则该指标在综合评价中不起作用。因此,可利用信息熵这个工具,计算出各个指标的权重,为多指标综合评价提供依据。
在信息论中,熵表示的是不确定性的量度。熵权法是一种客观赋权方法。它比较复杂,计算步骤如下:
第一步:构建各年份各评价指标的判断矩阵。
第二步:将判断矩阵进行归一化处理, 得到归一化判断矩阵。
第三步:根据熵的定义,根据各年份评价指标,可以确定评价指标的熵。
第四步:定义熵权。定义了第n个指标的熵后,可得到第n个指标的熵权。
第五步:计算系统的权重值。
搜寻资料的时候遇到的这个示例,这里分享给大家,MATLAB版本为MATLAB2015b。
一. MATLAB仿真
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%功能:矩阵分析--熵权法
%环境:Win7,Matlab2015b
%Modi: C.S
%时间:2022-06-25
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 清空环境变量
clear all
clc
tic
data=[0.75 0.63 0.75 0.81 0.69 0.81 5 10 1.93548E+11 7240.681967 6.298785927 0.62 192.4661076 4.686888049 2.0 3.400000095 0.115836213 96.97335856 15.38125957 101.7018861 6.499 4 6 6 7.6 6.6 23.1 31 4.8 2.431582014 9.5 -3.61798E-05 1 1
0.75 0.5 0.69 0.81 0.63 0.75 5 10.5 2.30814E+11 8486.599333 4.831769895 0.75 176.6685921 3.280791297 5.4 3.5 0.116569495 97.55335372 16.85965181 103.3669954 4.808180972 4 6 5.7 7.6 6.5 18.9 20 4.8 2.186625121 9.5 4.54671E-05 1 1
0.75 0.5 0.69 0.81 0.63 0.75 5 10.5 2.02258E+11 7312.008314 -1.513685083 2.82 162.5590474 0.056692279 0.6 5.199999809 0.133067151 94.79421005 15.72300017 99.20792011 3.626565493 4 6 5.6 7.8 6.4 15.6 18 4.7 2.018688231 9.5 0.004690208 1 1
0.75 0.5 0.69 0.81 0.63 0.75 5 10.5 2.55017E+11 9069.041757 7.425970496 3.14 157.9448161 4.268585079 1.7 5.199999809 0.138986262 100 10.58680811 99.78332539 3.354026707 4 6 6 7.9 7.1 17.5 17 4.8 1.909757926 9.5 0.000150235 1 1
0.69 0.5 0.69 0.81 0.63 0.75 5 10.5 2.97952E+11 10427.75605 5.293784657 3.11 154.9377943 5.07443252 3.2 5.300000191 0.140462949 100.3691636 11.24594845 100.661092 2.681390308 4 6 6 8 7.5 16.4 5 4.7 1.94 9.5 6.29193E-05 1 1
0.69 0.5 0.69 0.81 0.63 0.75 5 10.5 3.14443E+11 10834.65908 5.473454192 3.04 147.841804 2.829059379 1.7 4.900000095 0.16529799 100.1058325 5.927298365 100.9644134 2.015843113 4 6 6 8 7.5 15.1 6 4.7 1.92 9.5 0.000223747 1 1
0.69 0.5 0.69 0.81 0.63 0.75 5 10.5 3.23343E+11 10973.65594 4.713453716 3.04 142.691994 3.493591567 2.1 4.900000095 0.174524422 100.5891618 3.628205878 100.5497696 1.849146571 4 6 6 8 7.5 7.6 6 4.7 1.89 9.5 0.000545649 1 1
];
fzb=data(:,[1 2 3 7 8 12 15 16 17 21 22 23 27 28 30 31]);%取负指标
zzb=data(:,[4 5 6 9:11 13 14 18:20 24:26 29 32:34]);%取正指标
M=zzb;
x2=fzb;
N = (M - min(M(:)))/(max(M(:))-min(M(:)));%正指标归一化
N2 = ( max(x2(:))-x2)/(max(x2(:))-min(x2(:)));%负指标归一化
x=[N2(:,[1 2 3]),N(:,[1 2 3]),N2(:,[4 5]),N(:,4:6),N2(:,6),N(:,7:8),N2(:,[7 8 9]),N(:,9:11),N2(:,[10 11 12]),N(:,12:14),N2(:,[13 14]),N(:,15),N2(:,[15 16]),N(:,16:18)];
x1=x;
y=[];
[m,n]=size(x1);
for i=1:n
y(:,i)=x1(:,i)/sum([x1(:,i)]) ; % 矩阵标准化
end
for l=1:n
s(1,l)=0;
for j=1:m
if y(j,l)==0;%%%%%%%%“==”表示等于“=”是赋值
p(1,l)=0;
s(1,l)=s(1,l);
else
p(1,l)=y(j,l)*log(y(j,l));
s(1,l)=s(1,l)+p(1,l);
end
end
end
k=(log(m))^(-1);
e=-k*s;
h=ones(1,n)-e;
w=h/sum(h) % 指标权重值
toc
二. 仿真结果
w =
1 至 13 列
0.0000 0.0000 0.0000 0.0000 0.0001 0.0001 -0.0000 0.0001 0.0307 0.0219 0.2730 0.0011 0.0078
14 至 26 列
0.1017 0.0021 0.0007 0.0000 0.0004 0.1246 0.0001 0.0026 0.0000 -0.0000 0.0004 0.0003 0.0025
27 至 34 列
0.0725 0.3573 0.0001 0.0000 -0.0000 0.0000 0.0000 0.0000
时间已过 0.046010 秒。
三. 小结
矩阵熵权法计算的示例,后期可能会用到,这里做个笔记。每天学一个MATLAB小知识,大家一起来学习进步阿!