MATLAB熵权法计算权重
一、基本原理
在信息论中,熵是对不确定性的一种度量。不确定性越大,熵就越大,包含的信息量越大;不确定性越小,熵就越小,包含的信息量就越小。
根据熵的特性,可以通过计算熵值来判断一个事件的随机性及无序程度,也可以用熵值来判断某个指标的离散程度,指标的离散程度越大,该指标对综合评价的影响(权重)越大。比如样本数据在某指标下取值都相等,则该指标对总体评价的影响为0,权值为0.
熵权法是一种客观赋权法,因为它仅依赖于数据本身的离散性。
熵权法的思想是:变量数值变化越大,变异程度越大,则其权重应该更大;反之权重则越小。这是较为合理的。
二、MATLAB实现
(1)方法一
前提:输入的矩阵已经归一化到0.001-0.999之间(这里不是0-1是因为0-1会出问题)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | %B矩阵中的每一列均已经归一化至0-1 B(B==0)=0.0001; B(B==1)=0.9999; [n,m]= size (B); % n个样本, m个指标 %%计算第j个指标下,第i个样本占该指标的比重p(i,j) for i =1:n for j =1:m p( i , j )=B( i , j )/ sum (B(:, j )); end end %%计算第j个指标的熵值e(j) k=1/ log (n); for j =1:m e( j )=-k* sum (p(:, j ).* log (p(:, j ))); end d= ones (1,m)-e; %计算信息熵冗余度 w=d./ sum (d); %求权值w 主要需要的结果是这个 s=100*w*B'; %求综合得分 |
(2)方法二——推荐(不需要提前进行归一化 且直接得到每个样本的得分值)
输入的矩阵R的行数为样本数,列代表属性或者指标
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | [rows,cols]= size (R); % 输入矩阵的大小,rows为对象个数,cols为指标个数 k=1/ log (rows); % 求k Rmin = min (R); Rmax = max (R); A = max (R) - min (R); y = R - repmat (Rmin,rows,1); %y(i,j) = (R - repmat(Rmin,51,1))/(repmat(A,51,1)); for j = 1 : size (y,2) y(:, j ) = y(:, j )/A( j ); end %2 求Y(i,j) S = sum (y,1); Y = zeros (rows,cols); for i = 1 : size (Y,2) Y(:, i ) = y(:, i )/S( i ) end %3 lnYij= zeros (rows,cols); % 初始化lnYij % 计算lnYij for i =1:rows for j =1:cols if Y( i , j )==0 lnYij( i , j )=0; else lnYij( i , j )= log (Y( i , j )); end end end ej=-k*( sum (Y.*lnYij,1)); % 计算熵值Hj %4 weights=(1-ej)/(cols- sum (ej)); %5 F = zeros (rows,cols); for k = 1 : size (R,2) F(:,k) = weights(k)*y(:,k); end format long F = sum (F,2); %F即为对6个变量进行熵权法客观赋权后,计算获得的51年来的综合评分 |
参考:
https://zhuanlan.zhihu.com/p/28067337 方法一
https://www.cnblogs.com/qq874455953/p/10792579.html 考虑正向和负向指标
https://blog.csdn.net/wbj3106/article/details/82290445 方法二
https://zhuanlan.zhihu.com/p/115411437 R语言版
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示