楼主: zhjx19
21137 26

[程序分享] 熵值法确定权重原理及Matlab实现 [推广有奖]

11
779309195 发表于 2016-5-9 13:35:17
陈信研究员 发表于 2016-5-8 12:02
就是把其修改为matlab能识别的程序,然后运行啊
function [s,w]=shang(x)
x=[13.24        6.98          109.27          9.24        42.8          272        50.22
10.92        4.99          103.30          8.52        30.5          229        53.78
14.23        7.39          102.65          11.47        37.5          620        55.01
10.22        3.20          98.23          13.99        43.3          167        46.30
10.80        6.10          118.62          8.27        32.9          597        68.00
13.18        6.95          104.91          9.32        38.8          391        49.32
13.52        6.63          105.29          10.87        41.2          318        49.28
6.49            0.26          102.74          12.16        28.9          297        67.05
16.44        11.47  104.5          6.87        38.9          13        40.08
12.98        5.80          104.68          9.22        45.6          199        40.02
17.29        14.23  105.76  10.06        36.16  1092        88.27

];
% 函数shang.m, 实现用熵值法求各指标(列)的权重及各数据行的得分
% x为原始数据矩阵, 一行代表一个国家, 每列对应一个指标
% s返回各行得分, w返回各列权重
[n,m]=size(x); % n=23个国家, m=5个指标
%% 数据的归一化处理
% Matlab2010b,2011a,b版本都有bug,需如下处理. 其它版本直接用[X,ps]=mapminmax(x',0,1);即可
[X,ps]=mapminmax(x');
ps.ymin=0.002; % 归一化后的最小值
ps.ymax=0.996; % 归一化后的最大值
ps.yrange=ps.ymax-ps.ymin; % 归一化后的极差,若不调整该值, 则逆运算会出错
X=mapminmax(x',ps);
% mapminmax('reverse',xx,ps); % 反归一化, 回到原数据
X=X';  % X为归一化后的数据, 23行(国家), 5列(指标)
%% 计算第j个指标下,第i个记录占该指标的比重p(i,j)
for i=1:n
    for j=1:m
        p(i,j)=X(i,j)/sum(X(:,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=w*p';         % 求综合得分[\code]

上面这个程序我运行出来的结果是虚数!因为我是新手,求指教如何改正!谢谢!

12
jiajiawenhua 发表于 2016-8-11 17:39:03
我想问(ps.ymin=0.002; % 归一化后的最小值
ps.ymax=0.996; % 归一化后的最大值 )这个最大值和最小值的赋值依据是什么?

13
zhjx19 发表于 2016-8-12 15:08:26
779309195 发表于 2016-5-9 13:35
function [s,w]=shang(x)
x=[13.24        6.98          109.27          9.24        42.8          272        50.22
10.92        4.99          103.30          8.5 ...
测试你的数据,并没有问题:
无标题.png


14
zhjx19 发表于 2016-8-12 15:10:21
jiajiawenhua 发表于 2016-8-11 17:39
我想问(ps.ymin=0.002; % 归一化后的最小值
ps.ymax=0.996; % 归一化后的最大值 )这个最大值和最小值的赋 ...
目的是为了归一化到[0,1], 但若出现0或1,还原回来时,可能有问题,所以就适当缩一点,你可以适当调整,并不是必须这么取值

15
zhjx19 发表于 2016-8-12 15:13:07
q714236915 发表于 2016-5-2 20:29
我怎么运行不了啊 第一次接触Matlab 求教啊 好心人
你需要看一点matlab的函数怎么自定义怎么调用。
其实很简单,
1. 把函数单独保存为 同名的 shang.m
2. matlab的当前路径,设置为 shang.m 所在的路径
3. 命令窗口,输入你的数据矩阵x
执行[w,s]=shang(x) 即可

16
jiajiawenhua 发表于 2016-8-13 11:39:56
zhjx19 发表于 2016-8-12 15:10
目的是为了归一化到[0,1], 但若出现0或1,还原回来时,可能有问题,所以就适当缩一点,你可以适当调整,并 ...
谢谢,受教了。

17
安尐安 发表于 2017-7-5 10:37:31
我的为什么不显示W的值

18
huangjie1122 发表于 2017-7-11 16:16:31
标准化值出现零的后面计算不会有问题吗

19
王维明_TJ 发表于 2017-9-2 22:09:12
多谢!

20
xiao1207 发表于 2018-4-16 11:45:59
请问熵值法能对定性指标做评估吗

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-26 08:35